Posted in Javascript onFebruary 22, 2009
1.关于this对象
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();
2.关于函数对象
//增加函数对象方法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);
JavaScript基本概念初级讲解论坛贴的学习记录
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@