源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

JavaScript基本概念初级讲解论坛贴的学习记录

  • 时间:2021-03-05 03:38 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:JavaScript基本概念初级讲解论坛贴的学习记录
1.关于this对象
[u]复制代码[/u] 代码如下:
view plaincopy to clipboardprint? var obj1=new Object(); var obj2=new Object(); //给两个对象都添加属性p,并分别等于1和2 obj1.p=1; obj2.p=2; //给obj1添加方法,用于显示p的值 obj1.getP=function(){ alert(this.p); //表面上this指针指向的是obj1 } //调用obj1的getP方法,结果显示为1 obj1.getP(); //使obj2的getP方法等于obj1的getP方法 obj2.getP=obj1.getP; //调用obj2的getP方法,结果显示为2 obj2.getP(); var obj1=new Object(); var obj2=new Object(); //给两个对象都添加属性p,并分别等于1和2 obj1.p=1; obj2.p=2; //给obj1添加方法,用于显示p的值 obj1.getP=function(){ alert(this.p); //表面上this指针指向的是obj1 } //调用obj1的getP方法,结果显示为1 obj1.getP(); //使obj2的getP方法等于obj1的getP方法 obj2.getP=obj1.getP; //调用obj2的getP方法,结果显示为2 obj2.getP();
[b]2.关于函数对象 [/b]
[u]复制代码[/u] 代码如下:
//增加函数对象方法method1 Function.prototype.method1=function(){ alert("function1"); } function func1(a,b,c){ return a+b+c; } func1.method1(); //提示:function1 func1.method1.method1(); //提示:function1 //增加对象方法getType,既包括普通对象也包括函数对象 Object.prototype.getType=function(){ return typeof(this); } var array1=new Array(); function func1(a,b){ return a+b; } alert(array1.getType()); //提示:object alert(func1.getType()); //提示:function //func2作为一个对象传递给了func1的形参theFunc,再由func1内部进行theFunc的调用 function func1(theFunc){ theFunc(); } function func2(){ alert("ok"); } func1(func2); //提示:ok //当进行函数调用时,除了指定的参数外,还创建一个隐含的对象arguments function func(a,b){ alert(a); alert(b); for(var i=0;i<arguments.length;i++){ alert(arguments[i]); } } func(1,2,3); //提示:1,2,3 /* arguments对象的另一个属性是callee, 它表示对函数对象本身的引用. 这有利于实现无名函数的递归或者保证函数的封装性. */ var sum=function(n){ if(1==n) return 1; else return n+arguments.callee(n-1); } alert(sum(100)); //提示:5050 /* JavaScript为函数对象定义了两个方法:apply和call. 它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别: 以下是引用片段: Function.prototype.apply(thisArg,argArray); Function.prototype.call(thisArg[,arg1[,arg2…]]); 从函数原型可以看到,第一个参数都被取名为thisArg, 即所有函数内部的this指针都会被赋值为thisArg, 这就实现了将函数作为另外一个对象的方法运行的目的。 两个方法除了thisArg参数,都是为Function对象传递的参数。 */ //定义一个函数func1,具有属性p和方法A function func1(){ this.p="func1-"; this.A=function(arg){ alert(this.p+arg); } } //定义一个函数func2,具有属性p和方法B function func2(){ this.p="func2-"; this.B=function(arg){ alert(this.p+arg); } } var obj1=new func1(); var obj2=new func2(); obj1.A("byA"); //显示func1-byA obj2.B("byB"); //显示func2-byB obj1.A.apply(obj2,["byA"]); //显示func2-byA,其中[“byA”]是仅有一个元素的数组,下同 obj2.B.apply(obj1,["byB"]); //显示func1-byB obj1.A.call(obj2,"byA"); //显示func2-byA obj2.B.call(obj1,"byB"); //显示func1-byB /* 可以看出,obj1的方法A被绑定到obj2运行后, 整个函数A的运行环境就转移到了obj2,即this指针指向了obj2。 同样,obj2的函数B也可以绑定到obj1对象去运行。 代码的最后4行显示了apply和call函数参数形式的区别。 */ /* 与arguments的length属性不同, 函数对象还有一个属性length, 它表示函数定义时所指定参数的个数, 而非调用时实际传递的参数个数 */ function sum(a,b){ return a+b; } alert(sum.length);
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部