Javascript 如果Crockford建议我们将新关键字用于原型继承,为什么他说不要使用它?
我看了一段视频,Crockford告诉我们不要使用Javascript 如果Crockford建议我们将新关键字用于原型继承,为什么他说不要使用它?,javascript,Javascript,我看了一段视频,Crockford告诉我们不要使用new关键字。他说如果我没弄错的话,用Object.create代替。为什么他告诉我们不要使用new,如果他在他写的这篇文章中使用了它来实现原型继承: 我希望他使用Object.create而不是new,如下所示: function object(o) { return Object.create((function() {}).prototype = o); } 那么为什么他仍然使用new?Crockford讨论了new和对象。在中创
new
关键字。他说如果我没弄错的话,用Object.create代替。为什么他告诉我们不要使用new
,如果他在他写的这篇文章中使用了它来实现原型继承:
我希望他使用Object.create而不是new
,如下所示:
function object(o) {
return Object.create((function() {}).prototype = o);
}
那么为什么他仍然使用
new
?Crockford讨论了new
和对象。在中创建。摘录:
如果调用构造函数时没有new
前缀,而不是
创建和初始化一个新对象,将损坏
全局对象。没有编译时警告,也没有运行时
警告这是语言的一个不好的部分
在我的实践中,我完全避免使用new
这是一个很老的问题,但是
当克罗克福德写下这篇文章时,并没有。那是2008年,Object.create充其量只是一个提议(或者说很少在浏览器中实现)
他的最终配方基本上是一种聚填料:
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,所以你不必在其他任何地方使用它。也许他从那篇视频/文章中学到了什么?没有视频/上下文很难知道。可能是a)对象的组合。创建不跨少数浏览器的
,以及B)几年前写的那篇文章;他的编程风格,像我们大多数人一样,可能从那时起已经发生了变化和演变。以下是视频:(我不知道他在视频中说的确切位置,对不起)另外,在你参考的文章中,他在2008-04-07的增编基本上回答了这个问题,他定义了对象。如果它不存在,创建。您只需使用一次new
(定义Object.create
)。问题中的代码是您的,还是您在某处找到的?我询问的原因是它的(function(){}).prototype=
部分对代码没有影响。如果执行返回Object.create(o),则会得到相同的结果代码>也许我不熟悉所有的javascript攻击,但是为什么有人在没有new
关键字的情况下调用构造函数?!?Crockford实际上说的是,如果你省略了新的关键字,你将重击全局对象。他建议不使用它的原因是有可能忽略它。它是构造函数对象所必需的。