关于js中的call、apply和bind的理解
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)

  

posted on 2021-04-25 10:45  人鱼之森  阅读(63)  评论(0编辑  收藏  举报