JS通过构造函数的函数调用将属性添加到对象

时间:2016-06-26 12:11:56

标签: javascript javascript-objects

我无法弄清楚以下代码的原因:

 function Foo() {
    this.a = "a";                               
    this.c = add();
}
var add = function() {
    this.b = "added";
}

obj2 = new Foo();
alert("obj2.b is " + obj2.b); //obj2.b is Undefined

不会创造' b'属性为obj2,而此代码:

function Foo() {
    this.a = "a";                               
    this.func1 = add;
    this.c = this.func1();
}
var add = function() {
    this.b = "added";
}

obj2 = new Foo();
alert("obj2.b is " + obj2.b); // obj2.b is added

将创建' b'属性。 我是JS的新手,我尝试阅读使用函数作为构造函数,基本上我得到了这个想法,但我想还有一些我不知道的东西。
谢谢, 诺姆

1 个答案:

答案 0 :(得分:3)

  

这个值取决于函数的调用方式。

如果没有调用者,则this将指向默认/全局范围(窗口)。

如果您需要将上下文传递给其他函数,则应使用以下方法之一:.apply.bind

示例

function Foo() {
    this.a = "a";                               
    this.c = add.apply(this);
}
var add = function() {
    this.b = "added";
}

obj2 = new Foo();
console.log("obj2.b is " + obj2.b); //obj2.b is Undefined