设置 使用 Object.create() 创建的 JavaScript 对象的属性
Setting properties of JavaScript objects created with Object.create()
假设有一个简单的对象是用下面的JavaScript创建的
Builder = function (firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
Builder.prototype.build = function () {
return 'building....';
};
var b2 = new Builder('firstName', 'lastName');
我一直在阅读道格拉斯·克罗克福德的一些作品,他说它"更好"以创建如下所示的对象:
var builder = {
build: function () {
return 'building...';
}, firstName: 'firstName'
, lastName: 'lastName'
};
var b1 = Object.create(builder);
Object.create(( 方式是"更好的"(我很想听听专家为什么(,但我看不出我们如何轻松地将参数传递给第二个版本的"firstName and 'lastName
的值。 我比 JavaScript 更熟悉 C 系列语法语言,但在我看来,对象创建的构造函数方法"更好"。 为什么我错了?(假设对于企业级环境(
对于克罗克福德的方式,您将执行以下操作:
var build = function(firstName, lastName) {
// do private stuff here.. but this closure will still be accessible to the returned object
return {
firstName:firstName,
lastName:lastName
}
}
var b = build('john', 'smith')
它与OO方式一样干净/强大
Crockford的论点是OO不能很好地与亲典型遗传混合。 他觉得好像许多OO结构被添加到语言中,在这样做之前应该更清楚地考虑。 在我自己的代码中,我总是试图遵循他的合理建议,因为他来自前线:)
您可以将第二个参数中的firstName
和lastName
的初始值传递给Object.create()
:
var builder = {
getFullName : function() {
return this.firstName + " " + this.lastName;
}
};
var b1 = Object.create(builder, {
firstName : { writable:true, configurable:true, value: "Joe" },
lastName : { writable:true, configurable:true, value: "Shmoe" }
}
);
b1.getFullName() //prints out: Joe Shmoe
它非常冗长,但您可以创建自己的包装器。
更多细节/示例在这里。
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 循环遍历以数组为值的Javascript对象
- 从ajax请求中获取javascript对象
- 如何从对象的原型方法访问JavaScript对象属性
- 将XML转换为普通的旧JavaScript对象
- 通过引用传递JavaScript对象
- javascript对象操作:根据指定条件选择属性
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 如何在异步函数中使用javascript对象
- 临时Javascript对象
- 如何在ASP中为用户控件添加Javascript对象网
- 使用数组向下搜索Javascript对象
- Rails将JavaScript对象存储到Model的有效方式
- JavaScript对象不是从原型链继承的
- 如何创建具有默认值的JavaScript对象字段?(AngularJS模型相关)
- SetInterval在javascript对象中表现怪异
- Javascript 对象和 this 关键字
- 如何在不知道关键字的情况下访问javascript对象值
- 在 JavaScript 对象中设置要使用的运算符的属性
- 如何搜索JavaScript对象并更改值