JavaScript中call() 、 apply() 、bin

2019-05-26  本文已影响0人  January丶缘

在刚接触javascript时,就碰到call(),apply(),bind(),我一直不是很明白。在工作中接触它们次数多了,对这三个方法也有了点理解,总的就是一句话:三者的作用都是改变函数的执行上下文。今天把它们简单阐述一下!

JavaScript权威指南上的解释是: call() 、apply()可以看作是某个对象的方法,通过调用方法的形式来间接调用函数。我理解它们的作用是:都能继承另一个对象的方法和属性。bind() 就是将某个函数(属性或方法)绑定到某个对象上。

var obj = {name: "Tom"}

function foo() {console.log(this.name)}

foo.call(obj)       //打印结果: Tom   this 指向 指定的对象(obj)
// call()函数
var obj = {
    message: 'My name is: '
}

function getName(firstName, lastName) {
    console.log(this.message + firstName);
}

getName.call(obj, 'Tom', 'Jorry') // My name is: Tom  this 指向 指定的对象(obj)
// apply() 函数
var obj = {
    message: 'My name is: '
}

function getName(firstName, lastName) {
    console.log(this.message + firstName);
}

getName.apply(obj, ['Tom', 'Jorry']) // My name is: Tom  传参 是一个数组

//  this 指向 指定的对象(obj)

bind() 它的参数和call()相同。它和前两者不同在于: bind() 方法会返回执行上下文被改变的函数而不会立即执行,而前两者是直接执行该函数。

上一篇下一篇

猜你喜欢

热点阅读