j​a​v​a​s​c​r​i​p​t​自​定​义​函​数​教​程---百度文库

来源:互联网 发布:代理商系统源码 编辑:程序博客网 时间:2024/06/06 21:35

http://wenku.baidu.com/link?url=bN8bUecIUExRx-1CCGGzgv32MY6PvemfOJ2f1-JytpCcNAEFsMB55nT5KQ7FNOxXZWNqKNIj8EdlFlayR6xboFrBARnzZwk4koRHjKzr6na


其中6.2节中:

6.2、函数的apply、call方法和length属性    

 JavaScript为函数对象定义了两个方法:apply和call,它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别:      Function.prototype.apply(thisArg,argArray); 

 Function.prototype.call(thisArg[,arg1[,arg2…]]);       

从函数原型可以看到,第一个参数都被取名为thisArg,即所有函数内部的this指针都会被赋值为thisArg,这就实现了将函数作为另外一个对象的方法运行的目的。两个方法除了 thisArg参数,都是为Function对象传递的参数。

下面的代码说明了apply和call方法的工作方式:  

 //定义一个函数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-byAobj2.B("byB");    

//显示func2-byBobj1.A.apply(obj2,["byA"]);   

//显示func2-byA,其中[“byA”]是仅有一个元素的数组,下同obj2.B.apply(obj1,["byB"]); 

//显示func1-byBobj1.A.call(obj2,"byA");  //显示func2-byAobj2.B.call(obj1,"byB");  

//显示func1-byB    


可以看出,obj1的方法A被绑定到obj2运行后,整个函数A的运行环境就转移到了obj2,即this指针指向了obj2。同样obj2的函数B也可以绑定到obj1对象去运行。代码的最后4行显示了apply和call函数参数形式的区别。本文发表于www.bianceng.cn(编程入门网)   与arguments的length属性不同,函数对象还有一个属性length,它表示函数定义时所指定参数的个数,而非调用时实际传递的参数个数。

例如下面的代码将显示2: 

function sum(a,b) {     return a+b; }  alert(sum.length); 

-------------------------------

为什么 这两个函数可以用“new”? 函数已经作为Function的一个实例对象了啊?不懂

var obj1=new func1(); 

var obj2=new func2();  

0 0
原创粉丝点击