【问题标题】:JavaScript: ways of constructing a new instanceJavaScript:构造新实例的方法
【发布时间】:2013-06-18 08:52:55
【问题描述】:

根据this MSDN article - 滚动到Constructor Functions but No Classes,(在阅读MDN JS 参考之后)我应该能够构造一个像这样的对象:

function Dog(name){
    this.name = name;
}

// EXAMPLE 1
var dog = new Dog("Spot");
console.log("Dog using new:");
console.log(dog); // Dog object, awesome!

// EXAMPLE 2
var dog = {};
dog = Dog.call(dog,"Rowdie");
console.log("Dog using call:");
console.log(dog); // Undefined.. why?

但是,虽然第一个示例(构造新对象的最常见方法)返回了预期的实例,但第二个示例返回了 undefined - 我做错了什么吗?

这是我用来测试这个的 JSFiddle:http://jsfiddle.net/wk8JD/1/

【问题讨论】:

    标签: javascript constructor


    【解决方案1】:

    改变

    dog = Dog.call(dog,"Rowdie");
    

    Dog.call(dog,"Rowdie");
    

    当您使用 new 调用函数时,this隐式返回,即该函数的行为就像您在末尾有 return this;。来自MDN documentation

    构造函数返回的对象成为整个new表达式的结果。如果构造函数没有显式返回对象,则使用在步骤 1 中创建的对象。 (通常构造函数不返回值,但如果他们想覆盖正常的对象创建过程,他们可以选择这样做。)

    但如果你“正常”调用函数(即没有new),如果没有return 语句,它将返回undefined

    (在文章中他们也没有分配返回值)

    【讨论】:

      猜你喜欢
      • 2014-02-22
      • 2012-09-26
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 2021-02-28
      • 2021-12-13
      相关资源
      最近更新 更多