我看过一个视频,其中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?
克罗克福德讨论new并Object.create在此2008年11月消息给JSLint.com邮件列表.摘录:
如果调用不带
new前缀的构造函数,而不是创建和初始化新对象,则会损坏全局对象.没有编译时警告,也没有运行时警告.这是语言的不良部分之一.在我的实践中,我完全避免使用
new.
这是一个非常古老的问题,但......
当克罗克福德写下你提到的文章和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,所以你不必在其他任何地方使用它.