javascript - 了解 Object.create() 和 new SomeFunction() 之间的区别

标签 javascript prototype object-create

我最近偶然发现了 JavaScript 中的 Object.create() 方法,并尝试推断它与使用 new SomeFunction()< 创建对象的新实例有何不同,以及当您想要使用其中之一而不是另一个时。

考虑以下示例:

var test = {
  val: 1,
  func: function() {
    return this.val;
  }
};
var testA = Object.create(test);

testA.val = 2;
console.log(test.func()); // 1
console.log(testA.func()); // 2

console.log('other test');
var otherTest = function() {
  this.val = 1;
  this.func = function() {
    return this.val;
  };
};

var otherTestA = new otherTest();
var otherTestB = new otherTest();
otherTestB.val = 2;
console.log(otherTestA.val); // 1 
console.log(otherTestB.val); // 2

console.log(otherTestA.func()); // 1
console.log(otherTestB.func()); // 2

请注意,在这两种情况下都观察到相同的行为。在我看来,这两种情况之间的主要区别是:

  • Object.create() 中使用的对象实际上形成了新对象的原型(prototype),而在 new Function() 中声明的属性/函数则不会形成原型(prototype)。
  • 您无法像使用函数语法那样使用 Object.create() 语法创建闭包。考虑到 JavaScript 的词法(相对于 block )类型范围,这是合乎逻辑的。

以上说法正确吗?我错过了什么吗?你什么时候会使用其中一种而不是另一种?

编辑:链接到上述代码示例的 jsfiddle 版本:http://jsfiddle.net/rZfYL/

最佳答案

非常简单地说,new XObject.create(X.prototype) 并另外运行构造函数 函数。 (并让构造函数有机会返回应该是表达式结果的实际对象,而不是this。)

就是这样。 :)

其余的答案只是令人困惑,因为显然没有其他人阅读 new 的定义。任何一个。 ;)

关于javascript - 了解 Object.create() 和 new SomeFunction() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41343037/

相关文章:

javascript - 在 var x = function() 内重写 this.method = function()

c++ - 声明类实例的两种方式的区别

javascript - 是否可以使用 Object.create 模式来创建 CustomEvent 对象?

javascript - react : 'this.state' of parent component is undefined inside a child component function

javascript - Slick carousel centerMode 的问题 - 不断增长的中心元素

Javascript 继承调用父级的非默认构造函数

Javascript私有(private)变量+Object.create(引用闭包变量)

javascript - 单选按钮在提交后更改选中的值

javascript - 在$ .ajax()调用之一中转义$ (“html”).ajaxError()

javascript - 如何使用 Crockfords 的 Object.create() (Javascript) 获取我祖先的重写方法