任何人都可以请告诉我,在Javascript中的区别
MyClass.prototype = new Object(); //or ... = {}
和
MyClass.prototype = Object;
是什么?如果结果没有差异,哪一个是最佳实践方式?
任何人都可以请告诉我,在Javascript中的区别
MyClass.prototype = new Object(); //or ... = {}
和
MyClass.prototype = Object;
是什么?如果结果没有差异,哪一个是最佳实践方式?
您的前两个示例完全相同:
MyClass.prototype = new Object(); // empty object
MyClass.prototype = {}; // empty object
您的第三个示例无效,因为您要分配给 MyClass.prototype
参考 目的 构造函数,它是一个函数,而不是一个新对象。
MyClass.prototype = {prop1: 'value', prop2: 'value2'};
//...
MyClass.prototype.foo = 'bar';
MyClass.prototype.method1: function () {/**/};
编辑: 响应您的评论,空对象文字 { }
基本相当于 new Object()
因为这个:
生产ObjectLiteral:{}是 评估如下:
- 像表达式new Object()一样创建一个新对象。
- 返回结果(1)。
有关更多详细信息,请查看的11.1.5部分(对象初始化程序) ECMAScript语言规范 (PDF)。
编辑: 第三个例子不会产生任何错误,但是根本不好,例如,如果你在MyClass.prototype之后扩展,你可以很容易地破坏Object构造函数:
MyClass.prototype = Object;
MyClass.prototype.foo = 'bar';
Object.foo === MyClass.prototype.foo; // true
这取决于 Object
。如果它是你想要使用的功能 new Object()
方法。如果它是“虚拟类”(使用定义 Object = {someProperty: someValue}
)然后你使用第二种方法。
更多指针 这一页 在JavaScript中的原型继承
MyClass.prototype.method1:function() {/ ** /};
以上更正:应该是
MyClass.prototype.method1 = function () {/**/};
(注意'method1'之后的等号)。
仅当方法定义本身位于对象定义中时才使用冒号,如:
var myObject = {myVar1: 10, myMethod1: function() { /* */};