我最近偶然發現了JavaScript中的Object.create()
方法,並試圖推導出它與創建一個對象的新實例的方式不同new SomeFunction()
,以及當您會想要使用其中一個。瞭解Object.create()和新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 block)類型,這是合乎邏輯的。
上述說明是否正確?我錯過了什麼?你什麼時候使用一個?
編輯:鏈接的jsfiddle版本上面的代碼示例的:http://jsfiddle.net/rZfYL/
請參閱[使用「Object.create」而不是「new」](http:// stackoverflow。com/q/2709612/1048572) – Bergi 2015-07-24 15:04:23