javascript - JS通过构造器调用函数为对象添加属性

标签 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

这段代码不会为 obj2 创建“b”属性:

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 的新手,我尝试阅读有关使用函数作为构造函数的内容,基本上我明白了,但我想我仍然缺少一些东西。
谢谢你, 诺姆

最佳答案

the value of this is determined by how a function is called.

如果没有调用者,那么 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

关于javascript - JS通过构造器调用函数为对象添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38038402/

相关文章:

javascript - 使用 javascript 函数生成并插入 html

javascript - 如果键存在,则使用键和值形成 JSON

javascript - 返回上一个 "this"

javascript - 使用递归创建 JSON 字符串(replicate stringify)

javascript - 是否可以将服务注入(inject) Angular 1.5 组件的 templateUrl 属性?

javascript - 正则表达式@字边界中的字符

javascript - 消息传递在 Chrome 扩展中不起作用

javascript - 我可以在 Vue 实例方法内部传播的 mapMutations 中使用 "this"吗?

javascript - 如何从 JavaScript 数组中删除重复对象

javascript - 我想尽快匹配来自流的请求