美文网首页
JavaScript中 call(),apply(),bind(

JavaScript中 call(),apply(),bind(

作者: 鱼Fcn | 来源:发表于2019-04-14 11:36 被阅读0次

call()
应用于:Function 对象
调用一个对象的一个方法,以另一个对象替换当前对象。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
thisObj 可选项。将被用作当前对象的对象。
arg1, arg2, , argN 可选项。将被传递方法参数序列。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

使用例子:
var person1 = {
    name : "qqq",
    fn: function(){
        console.log(this.name);
    }
}
var person2 = {
    name : "www",
    fn: function(){
        console.log(this.name);
    }
}
console.log(person1.fn()) //qqq
console.log(person1.fn.call(person2 )) //www

此处调用了call(),因为传入的是person2,所以this.指向的也是person2.name,也就是“www”。

注意到,call()与apply()的区别:功能一样。第二个参数形式不一样。call传递多个参数,是任意形式。apply第二个参数必须是数组形式。

用代码来理解它们区别最好:

a.call(b,2,3); ==>  a.apply(b,[2,3]);//数组形式传入

就是利用了apply参数是数组的特性。结合函数的隐性参数,都会自动保存在arguments数组中。这样,使用apply的方式:

this.initialize.apply(this, arguments);

可以直接将当前函数的arguments数组作为apply的第二个参数传入,不需要转化。

bind()的作用与call()和apply()一样,都是可以改变函数运行时上下文,区别是call()和apply()在调用函数之后会立即执行,而bind()方法调用并改变函数运行时上下文后,返回一个新的函数,供我们需要时再调用。
var person = {
    name: "qqq",
    getName:function(){
        return this.name;
    }
}
var boy = {
    name:"www",
}
//bind()返回一个新的函数,以便后面调用
var newFn = person.getName.bind(boy);
//调用该函数
console.log(newFn())//输出www

相关文章

网友评论

      本文标题:JavaScript中 call(),apply(),bind(

      本文链接:https://www.haomeiwen.com/subject/vkpjwqtx.html