![](/img/trans.png)
[英]Understanding why true prototypal inheritance is better than classical/pseudo prototypal inheritance and why i shouldn't use “new”
[英]Why does Crockford say not to use the new keyword if he advises us to use it for prototypal inheritance?
我看到一個視頻,其中Crockford告訴我們不要使用new
關鍵字。 如果我沒弄錯的話,他說要使用Object.create。 他寫道: http : //javascript.crockford.com/prototypal.html他為什么告訴我們不要使用new
如果他用它來實現原型繼承?
我希望他使用Object.create而不是new
,如下所示:
function object(o) {
return Object.create((function() {}).prototype = o);
}
那么為什么他仍然使用new
呢?
Crockford在2008年11月的消息中討論了new
和Object.create
到JSLint.com郵件列表 。 摘錄:
如果在沒有
new
前綴的情況下調用構造函數,則不會創建和初始化新對象,而是會破壞全局對象。 沒有編譯時警告,也沒有運行時警告。 這是語言的不良部分之一。在我的實踐中,我完全避免使用
new
。
這是一個非常古老的問題,但......
當Crockford寫你提到的文章和Paul Beusterien關聯的討論時 ,沒有Object.create
。 它是2008年,而Object.create
最多只是一個提案(或者很少在瀏覽器中實現)。
他的最終配方基本上是一個polyfill:
if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
}
newObject = Object.create(oldObject);
因此,他唯一使用new
是模擬(或模仿) Object.create
必須做的事情。
他並不建議我們使用它。 他提出了一種使用它的polyfill,所以你不必在其他任何地方使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.