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:{}的计算方法如下:
- 像表达式new Object()一样创建一个新对象.
- 返回结果(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)