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;
}
从这里我们可以使用原型链向 PersonTemplate
的 protoype
添加方法。
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 here 的 OLOO 风格,但这是一个更大的讨论。
我只想问一下创建这样的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;
}
从这里我们可以使用原型链向 PersonTemplate
的 protoype
添加方法。
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 here 的 OLOO 风格,但这是一个更大的讨论。