function add (x, y)
{
console.log (x + y);
}
function minus (x, y)
{
console.log (x - y);
}
add.call (minus , 1, 1); //2
以上的理解是就是用add来代替minus
如果有一个方法是A.call(B, x, y), 那么其实就是把A的函数放到B当中运行,x和y都是A方法的参数
用call还可以用来实现继承
function myfunc1(){
this.name = 'Lee';
this.myTxt = function(txt) {
console.log( 'i am',txt );
}
}
function myfunc2(){
myfunc1.call(this);
}
var myfunc3 = new myfunc2();
myfunc3.myTxt('Geing'); // i am Geing
console.log (myfunc3.name); // Lee
JavaScript中的Array.prototype.slice.call(arguments)能将有length属性的对象转换为数组(特别注意: 这个对象一定要有length属性). 但有一个例外,IE下的节点集合它不能转换(因为IE下的dom对象是以com对象的形式实现,js对象和com对象不能进行转换)
bind的作用和call,apply是类似的,但是不同的是,bind()方法主要就是将函数绑定到某个对象,bind()会创建一个函数,函数体内的this对象的值会被绑定到传入bind()第一个参数的值,例如,f.bind(obj),实际上可以理解为obj.f(),这时,f函数体内的this自然指向的是obj
以下是bind的使用例子
function f(y, z){ return this.x +y + z } var m = f.bind({x: 1}, 2)(0) // var m = f.bind({x : 1}, 2) // m(3) console.log(m)