如果Crockford建议我们将其用于原型继承,为什么不说使用new关键字呢?

0x4*_*2D2 15 javascript

我看过一个视频,其中Crockford告诉我们不要使用new关键字.如果我没弄错的话,他说要使用Object.create.new他写道:http://javascript.crockford.com/prototypal.html他为什么告诉我们不要使用它是否已经用它来实现原型继承?

我希望他使用Object.create而不是new像这样:

function object(o) {
    return Object.create((function() {}).prototype = o);
}
Run Code Online (Sandbox Code Playgroud)

那为什么他仍然使用new

Pau*_*ien 6

克罗克福德讨论newObject.create此2008年11月消息给JSLint.com邮件列表.摘录:

如果调用不带new前缀的构造函数,而不是创建和初始化新对象,则会损坏全局对象.没有编译时警告,也没有运行时警告.这是语言的不良部分之一.

在我的实践中,我完全避免使用new.


sla*_*cer 5

这是一个非常古老的问题,但......

当克罗克福德写下你提到的文章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);
Run Code Online (Sandbox Code Playgroud)

new因此,他唯一的用途是模拟(或模仿)Object.create必须做的事情.

他并不建议我们使用它.他提出了一种使用它的polyfill,所以你不必在其他任何地方使用它.