如何在ECMAScript 5: Object中配置属性.创建或定义对象属性
How to configure properties in ECMAScript 5: Object.create or Object.defineProperties?
在ECMAScript 5中定义属性属性的首选方式是什么?据我所知,至少有两种方法:
function Foo () {
Object.defineProperties(this, {
'a': {
value: "A",
writable: false
},
'b': {
value: "B",
writable: true,
enumerable: true
}
});
}
var f = new Foo();
或:
var Foo = Object.create({}, {
'a': {
value: "A",
writable: false
},
'b': {
value: "B",
writable: true,
enumerable: true
}
});
};
var f = Object.create(Foo);
除了使用new
和Object.create
实例化的优点之外,使用Object.defineProperties()
定义属性是否会像第一个示例那样影响性能?这两个是相等的吗?对可读性有共识吗?
使用
定义属性是否会影响性能?Object.defineProperties()
是的。属性描述符没有像普通属性那样进行优化,因此要慢得多。如果您(不得不)使用它们,那么无论如何您都不会关心性能。比较Object.create
和new
是没有意义的,因为它们的行为不同,它们的性能差异不显著。
号两者相等吗?
// The first one,
function Foo() {
Object.defineProperties(this, propertydescriptors);
}
f = new Foo;
// is equivalent to
function Foo() {}
f = Object.defineProperties(new Foo, propertydescriptors);
// as long as there is closure in the property descriptor
// The second one,
foo = Object.create({}, propertydescriptors);
// is equivalent to
foo = Object.defineProperties(Object.create({}), propertydescriptors);
和new Foo
不一样的是Object.create({})
——没有共同的Foo.prototype
。同样,在第二个例子中你甚至有
f = Object.create(foo);
现在肯定不同于上面的f = new Foo
。
对可读性有共识吗?
构造函数中的属性描述符非常少见。如果您只是需要它们,那么没有理由不使用更短、更简洁的Object.create
语法。然而,只有当你真的想从非空对象继承时,你才应该使用Object.create
:
f = Object.create(fooproto, propertydescriptors);
如果没有,就使用
f = Object.defineProperties({}, propertydescriptors);
相关文章:
- 断言属性不可配置
- 使用Javascript而不是html数据属性配置Parsley
- 为什么此可配置属性不可删除
- 缺少咕噜声所需的配置属性
- Sencha Touch Store配置属性仅在“__proto__”;
- 使用script元素上的html data-*属性来配置引用的脚本文件
- Magento 1.9.2-更新自定义属性'delivery_time'在可配置的产品过程中
- 如何更改 Javascript 对象属性的可写可枚举和可配置值
- TypeError: 属性 Array.prototype.splice.call(..) 是不可配置的,无法删除
- 递归 js v3 未捕获的类型错误:无法读取未定义的属性“配置”
- 通过函数填充 Grunt 任务配置的“文件”属性
- 在 JSON.parse() 之后保留属性属性(可写、可配置)
- PyQT4:“类型错误:尝试配置不可配置属性的可配置属性
- 类型错误:属性 1 不可配置,无法删除
- Magento可配置产品价格计算,基于所选属性
- 使现有的不可写和不可配置属性可写和可配置
- rChartsCalendar:通过编程设置嵌套的json属性来配置日历图表
- 如何将TinySort配置为将没有属性的元素放在最后
- 如何让Magento在属性选择上显示可配置的产品价格
- 将JavaScript getter/setter添加到本机不可配置的属性中