JavaScript 对象构造函数 return 属性

JavaScript object Constructors return properties

我只想问一下创建这样的JavaScript对象模型构造函数样式有什么好处

var PersonTemplate = function () {
    return {
        recordId: 0,
        username: '',
        firstName: '',
        lastName: ''
    }
}

通过 return 明确定义的对象,您正在打破 "out-of-the-box" 原生于 JavaScript 的原型继承链。下面是使用构造函数实例化从原型继承的新对象的典型示例...

function PersonTemplate(firstName, lastName) {
    this.firstName = firstName;
    this.lastName  = lastName;
}

从这里我们可以使用原型链向 PersonTemplateprotoype 添加方法。

PersonTemplate.prototype.sayHello = function() {
    return 'Hello, my name is ' + this.firstName + '!';
} 

var john = new PersonTemplate('John', 'Smith');
john.sayHello(); // => "Hello, my name is John!"

现在,如果我们尝试通过上面的示例利用原型继承(假设 sayHello 仍添加到 PersonTemplate.prototype,这将是结果...

var PersonTemplate = function() {
    return {
        firstName: '',
        lastName: ''
    }
}

var john = new PersonTemplate('John', 'Smith');
john.sayHello(); // => Uncaught TypeError: john.sayHello is not a function

通过显式 return 来自构造函数的对象文字,linkage 被打破并且您不再通过原型链使用 "classical" 面向对象 JavaScript .

这并不是说如果在此基础上进行扩展并组合出一种新颖的继承技术,就不会有深奥而复杂的优势。毕竟,有各种创造性的方法可以将 link 对象组合在一起(例如 Kyle Simpson hereOLOO 风格,但这是一个更大的讨论。