据我所知,我们使用foo.call()
来链接对象的构造函数。例如。以下内容:
function Product(name, price) {
this.name = name;
this.price = price;
}
function Food(name, price) {
Product.call(this, name, price);
this.category = 'food';
}
function Toy(name, price) {
Product.call(this, name, price);
this.category = 'toy';
}
var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);
我们可以直接将call()
代码插入:
Product
方法。
function Food(name, price) {
this.name = name;
this.price = price;
this.category = 'food';
}
function Toy(name, price) {
this.name = name;
this.price = price;
this.category = 'toy';
}
var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);
据我所知,foo()执行该函数。因此,如果我们直接将函数调用为Product.call(this, name, price);
,那么代替Product(name , price)
,那么这必须等同于写this.name = name; this.price = price;
Product(name , price)
直接将name
分配给this.name
,即cheese.name
和fun.name
?如果出于某种原因我们必须使用调用方法,那么为什么我们将this
参数传递给call方法?为什么我们不使用Product.call(name, price)
?
答案 0 :(得分:0)
在Javascript中,函数在特定上下文中执行。根据函数的调用方式(有四种方式),this
被赋予一定的值。
一种方法是调用独立功能。在非严格模式下,如果您从Product(name, price)
正文中拨打Food
,this
会分配global
(或window
)对象的值。 name
的值将分配给全局变量name
等,而不是this
方法中正在构造的Food
对象。
在严格模式下,如果您执行与上述相同的操作,则会为this
分配值null
或undefined
,因此您将收到错误。
另一种方法是使用原始方法call
调用函数,这允许我们通过将this
对象作为第一个参数传递给call
来为其提供正确的值。方法
如果我们不使用call
,则this
将不会引用正确的对象。