任何人都可以請告訴我,這裏的Javascript差=對象
MyClass.prototype = new Object(); //or ... = {}
和
MyClass.prototype = Object;
之間的區別是什麼?如果結果沒有區別,哪一個是最佳實踐方式?
任何人都可以請告訴我,這裏的Javascript差=對象
MyClass.prototype = new Object(); //or ... = {}
和
MyClass.prototype = Object;
之間的區別是什麼?如果結果沒有區別,哪一個是最佳實踐方式?
你的前兩個例子是完全等價的:
MyClass.prototype = new Object(); // empty object
MyClass.prototype = {}; // empty object
你的第三個例子是無效的,因爲你是分配給MyClass.prototype
到參考構造函數是Object,它是一個函數,而不是一個新對象。
我個人比較傾向於第二種,對象literal或initialiser語法:
MyClass.prototype = {prop1: 'value', prop2: 'value2'};
//...
MyClass.prototype.foo = 'bar';
MyClass.prototype.method1: function() {/**/};
編輯:在回答您的意見,一個空的對象文本{ }
實質上等同於new Object()
因爲這樣:
生產ObjectLiteral:{}是 評估如下:
- 通過表達式new Object()創建一個新對象。
- 返回結果(1)。
詳情檢查ECMAScript Language Spec(PDF)的11.1.5節(對象初始化劑)。
編輯:第三個例子不會產生任何錯誤,但也不好,例如,如果你擴展後的MyClass.prototype您可以輕鬆地揍了對象的構造函數:
MyClass.prototype = Object;
MyClass.prototype.foo = 'bar';
Object.foo === MyClass.prototype.foo; // true
MyClass.prototype.method1:function() {/ ** /};
校正上述:它應該是
MyClass.prototype.method1 = function() {/**/};
(注意等於 '方法1' 後符號)。
當該方法定義本身是一個對象的定義內,像冒號僅用於:什麼是在這裏使用的「新」的關鍵字的原因]的
var myObject = {myVar1: 10, myMethod1: function() { /* */};
可能重複(HTTP:/ /stackoverflow.com/questions/12592913/what-is-the-reason-to-use-the-new-keyword-here) – Bergi 2014-02-18 21:09:23
@Bergi這個問題已經超過4年了。你鏈接到的那個是2歲... – moxn 2014-02-19 22:10:41
這個1.5歲的答案仍然有效,這個問題仍然可以通過搜索和鏈接找到。它應該指向其他有用的答案... – Bergi 2014-02-20 10:36:52