请使用以下代码段:
Foo() {}
var bar = new Foo(); /* uses Foo as constructor for new object */
现在我创建一个函数,将属性x添加到我的对象并将其值赋给2;
function addX() {
this.x = 2;
}
我的问题是,为什么不成功将x属性添加到bar对象:
addX(bar);
虽然这样做:
addX.apply(bar);
他们不应该做同样的事吗?
我是一名初级javascript程序员,试图更好地理解语言和OOP。没有相应的现实世界的例子,即我目前不在项目的中间。我刚刚学习了我能做什么,不能用对象做什么,我想弄明白为什么。
答案 0 :(得分:1)
如果“应用”某个对象,则表示该函数将获得“this”变量,该变量将成为对象本身。而只是调用addX(bar)将bar作为参数传递给函数。
addX就是这样写的:
function addX(barObject) {
barObject.x = 2;
}
调用addX(bar)会起作用。
然而,在您的示例中,addX.apply(bar)在内部执行此操作:
// apply does the following internally
bar.addX = function()
{
this.x = 2;
}
bar.addX()
// end of scope for apply
因此addX(bar)在你的例子中没有做任何事情,因为在这种情况下,“this”不属于除函数本身之外的任何东西。
答案 1 :(得分:0)
修改addX方法,如下所示。调用前一个方法不会将上下文作为参数传递。
function addX(barx) {
barx.x = 2;
}
答案 2 :(得分:0)
每个函数都有一个特殊的'this'对象。调用函数时,将设置此值,该值是对函数正在操作的上下文对象的引用(当在网页的全局范围内调用函数时,此对象指向窗口对象)。 apply()方法的函数用于调用具有特定值的函数。 使用'bar'参数提供的apply方法调用函数会将函数的this值设置为bar对象。