簡體   English   中英

如果Crockford建議我們將其用於原型繼承,為什么不說使用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月的消息中討論了newObject.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM