有谁能解释一下在Javascript中使用call
和apply
方法的上下文吗?
为什么要使用call
和apply
而不是直接调用函数?
发布于 2011-12-29 01:52:34
当您想要向函数传递不同的this
值时,可以使用call
或apply
。本质上,这意味着您想要执行一个函数,就好像它是一个特定对象的方法一样。这两者之间的唯一区别是,call
需要以逗号分隔的参数,而apply
需要数组中的参数。
来自Mozilla's apply
page的一个示例,其中构造函数是链式的:
function Product(name, price) {
this.name = name;
this.price = price;
if (price < 0)
throw RangeError('Cannot create product "' + name + '" with a negative price');
return this;
}
function Food(name, price) {
Product.apply(this, arguments);
this.category = 'food';
}
Food.prototype = new Product();
function Toy(name, price) {
Product.apply(this, arguments);
this.category = 'toy';
}
Toy.prototype = new Product();
var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);
Product.apply(this, arguments)
的作用如下:Product
构造函数作为Food
和Toy
构造函数中的一个函数应用,每个对象实例都作为this
传递。因此,Food
和Toy
现在都有this.name
和this.category
属性。
发布于 2011-12-29 01:51:38
发布于 2011-12-29 02:11:46
当您希望使用不同的this
值执行函数时,可以使用.call()
。它设置指定的this
值,设置指定的参数,然后调用函数。.call()
和只执行函数之间的区别在于函数执行时this
指针的值。当你正常执行函数时,javascript决定this
指针是什么(通常是全局上下文window
,除非函数是作为对象上的方法调用的)。当您使用.call()
时,您可以精确地指定您希望将this
设置为的值。
当要传递给函数的参数在数组中时,可以使用.apply()
。.apply()
还可以使用特定的this
值来执行函数。当您有不确定数量的来自其他来源的参数时,最常使用.apply()
。它通常用于通过使用特殊的局部变量arguments
将参数从一个函数调用传递到另一个函数调用,该变量包含一个传递给当前函数的参数数组。
https://stackoverflow.com/questions/8659390
复制相似问题