MyClass.prototype = new Object()和MyClass.prototype = Object之间的区别

mox*_*oxn 11 javascript inheritance

任何人都可以告诉我,在Javascript中的区别

MyClass.prototype = new Object(); //or ... = {}
Run Code Online (Sandbox Code Playgroud)

MyClass.prototype = Object;
Run Code Online (Sandbox Code Playgroud)

是什么?如果结果没有差异,哪一个是最佳实践方式?

CMS*_*CMS 11

您的前两个示例完全相同:

MyClass.prototype = new Object(); // empty object
MyClass.prototype = {}; // empty object
Run Code Online (Sandbox Code Playgroud)

您的第三个示例无效,因为您正在分配对Object构造函数MyClass.prototype的引用,它是一个函数,而不是一个新对象.

我个人更喜欢第二种,对象文字初始化语法:

MyClass.prototype = {prop1: 'value', prop2: 'value2'};
//...
MyClass.prototype.foo = 'bar';
MyClass.prototype.method1: function () {/**/};
Run Code Online (Sandbox Code Playgroud)

编辑:响应您的评论,空对象文字{ }基本上等同于new Object():

生产ObjectLiteral:{}的计算方法如下:

  1. 像表达式new Object()一样创建一个新对象.
  2. 返回结果(1).

有关更多详细信息,请查看ECMAScript语言规范(pdf)的11.1.5部分(对象初始化程序).

编辑:第三个例子不会产生任何错误,但是根本不好,例如,如果你在MyClass.prototype之后扩展,你可以很容易地破坏Object构造函数:

MyClass.prototype = Object;
MyClass.prototype.foo = 'bar';

Object.foo === MyClass.prototype.foo; // true
Run Code Online (Sandbox Code Playgroud)