首页 > 科技 >

js中的call和apply从何而来?

2019-03-18 04:10:07 暂无 阅读:1226 评论:0
js中的call和apply从何而来?

平时在写js代码中,当需要挪用某一个函数或许方式时,我们只需要在函数名称后背加个()并在括号中传入函数的参数就能够。let a = {

add: function (a, b) {

console.log(this);

console.log(a + b);

}

}

a.add(1, 2);

然则当此外一个对象b想挪用上面的add方式时,该若何做呢?这时我们就能够使用call和apply方式。let a = {

add: function (a, b) {

console.log(this);

console.log(a + b);

}

}

a.add(1, 2);

let b = {

x:5,

y:7

}

a.add.call(b,b.x,b.y)

我们在a.add方式后背挪用call方式,而且传入了3个参数,个中第一个参数为函数执行的上下文this,也就是函数执行的上下文由a酿成了b,后背的第2个和第三个参数是方式add的2个参数。事实上我们也经常使用call来挪用一个对象上不存在的方式,经由函数或许方式的挪用改变函数的执行上下文。apply方式和call雷同,只是传入的参数为数组类型。

那我们看看call和apply的出处。我们建立函数其实能够使用组织函数。var fn = new Function('console.log("a")');

fn();

然则这个方式相对函数表达式写法很复杂,并且还需要把字符串转换成js代码,所以执行效率也不高,所以很少如许写。然则如许写我们更轻易懂得call和apply的起原,其实Function作为一个函数也是有原型的,这个原型上也绑定了可供函数实例挪用的方式函数,个中就包含call和apply方式。

相关文章