call
摘要:
通过给定的this和arguments来调用一个function
注意:该方法与apply方法语法相似,但不同的是:call()接受参数列,而apply()接受传递给函数的参数数组
Function类的一个方法:版本JavaScript 1.3版以后
语法:
fun.call(thisArg[, arg1[, arg2[, ...]]])
参数说明:
thisArg:
为fun()的调用指定对象。注意:你看到的this值可能不是实际的值:如果这个方法是在 non-strict mode下,null和undefined会被全局对象替换掉,原始的值会被封装。
arg1,arg2,....
this对象的参数
描述:
当调用一个已存在的函数,你可以分配不同的对象。这时,this指定的对象是当前正在调用对象。
通过call,你可以只写一次方法,而被另一个对象来继承。而不用自己再新建对象时,重写该方法。(即对象冒充,下面会有例子说明!)
在MDN官网上面有例子可以看看。另外,无意中在stackoverflow上看到了篇相关的问题,看到里面的一个回答,一下子就明白了对象冒充,怎么冒充了。
下面把那部分摘取出来 In javascript, methods of an object can be bound to another object at runtime. In short, javascript allows an object to "borrow" the method of another object:
1 object1 = { 2 name:'frank', 3 greet:function(){ 4 alert('hello '+this.name) 5 } 6 }; 7 8 object2 = { 9 name:'andy' 10 }; 11 12 // Note that object2 has no greet method. 13 // But we may "borrow" from object1: 14 15 object1.greet.call(object2);
The call
and apply
methods of function objects (in javascript functions are objects as well) allows you to do this. So in your code you could say that the Nodelist is borrowing an array's slice method. What does the conversion is the fact that slice returns another array as it's result.
这里的第一句话说的很形象,大致意思就是:在JavaScript中,对象的方法可绑定到另外一个对象上。简单点说,就是,JavaScript中允许对象‘借用’本不属于它本身的方法。“冒充”也就不言而喻了,就上上面的例子来说,object2冒充object1,来调用object1的方法。