我最近偶然发现了Object.create()
JavaScript 中的方法,并试图推断它与使用 来创建对象的新实例有何不同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()
实际上形成了新对象的原型,而new Function()
来自声明的属性/函数的对象不形成原型。 - 您不能
Object.create()
像使用函数式语法那样使用语法创建闭包。考虑到 JavaScript 的词法(vs 块)类型范围,这是合乎逻辑的。
以上说法正确吗?我错过了什么吗?你什么时候会使用一个?
编辑:链接到上述代码示例的 jsfiddle 版本:http : //jsfiddle.net/rZfYL/