采用以下代码片段:
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。没有相应的真实示例,即我目前不在项目中。我一直在学习我能用对象做什么和不能做什么,我正试图找出原因。
最佳答案
一个函数如果“应用”到一个对象,将意味着该函数将获得“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”不属于任何东西,只属于函数本身。
关于javascript - 为什么我不能在不使用原型(prototype)、调用或应用的情况下向对象添加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18687272/