Object.defineProperties / create真的需要吗?

时间:2012-12-05 07:54:30

标签: javascript oop

某些项目使用Object.create()Object.defineProperties()功能。我不知道是推荐吗?是什么区别

x = Object.create(null); 

VS

x = {}

并且

x = {}
x.__proto__.hello = function() { 
    console.log("hello"); 
}

vs

x = Object.create(null);
Object.defineProperty(x, "hello", { 
    value: function() { 
        console.log("hello"); 
    } 
});

defineProperty/create对我来说似乎非常冗长和冗长。何时/为何使用它们?也许好的方法是强制执行getter / setter / overriding属性?

1 个答案:

答案 0 :(得分:0)

存在巨大差异。看看文档!

  • Object.create确实会创建一个继承自第一个参数null的对象。相比之下,{} - 或new Object() - 会创建一个继承自Object.prototype的新对象。
  • __proto__是非标准的,不应使用。但是,在您的情况下,您只需执行Object.prototype.hello = function() {…};。永远不要用可枚举的属性扩展该对象,永远不要!
  • Object.defineProperty确实在具有特殊描述符对象的对象上定义属性。 enumerableconfigurablewritable属性默认为false,这意味着您无法以delete x.hello为例,或指定任何其他值。< / LI>

您的第一个代码段创建一个普通对象,该对象从hello继承Object.prototype方法,而您的第二个代码段创建一个从无任何内容继承并具有不可编辑的hello属性的对象。我没有看到太多相关性。

相关问题