最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Difference between MyClass.prototype = new Object() and MyClass.prototype = Object - Stack Overflow

programmeradmin2浏览0评论

could anyone please tell me, where in Javascript the difference between

MyClass.prototype = new Object(); //or ... = {}

and

MyClass.prototype = Object;

is? And if there is no difference in the result, which one is the best-practise-way-to-go?

could anyone please tell me, where in Javascript the difference between

MyClass.prototype = new Object(); //or ... = {}

and

MyClass.prototype = Object;

is? And if there is no difference in the result, which one is the best-practise-way-to-go?

Share Improve this question edited May 7, 2015 at 16:15 thefourtheye 240k53 gold badges465 silver badges500 bronze badges asked Sep 14, 2009 at 6:23 moxnmoxn 1,8001 gold badge15 silver badges35 bronze badges 4
  • possible duplicate of What is the reason to use the 'new' keyword here? – Bergi Commented Feb 18, 2014 at 21:09
  • 1 @Bergi this question is more than 4 years old. The one you linked to is 2 years old... – moxn Commented Feb 19, 2014 at 22:10
  • The 1.5-year old answer is still valid, and this question is still found via search and links. It should point to other helpful answers… – Bergi Commented Feb 20, 2014 at 10:36
  • possible duplicate of new MyObject(); vs new MyObject; – Ciro Santilli OurBigBook. Commented Sep 5, 2015 at 10:11
Add a ment  | 

3 Answers 3

Reset to default 11

Your first two examples are pletely equivalent:

MyClass.prototype = new Object(); // empty object
MyClass.prototype = {}; // empty object

Your third example is not valid, since you are assigning to the MyClass.prototype a reference to the Object constructor, and it's a function, not a new object.

I personally prefer the second, the object literal or initialiser syntax:

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

Edit: In response to your ment, an empty object literal { } essentially equivalent to new Object() because of this:

The production ObjectLiteral : { } is evaluated as follows:

  1. Create a new object as if by the expression new Object().
  2. Return Result(1).

For more details check the 11.1.5 section (Object Initialiser) of the ECMAScript Language Spec (pdf).

Edit: The third example won't produce any errors, but is not good at all, for example you can easily clobber the Object constructor function if you extend afterward the MyClass.prototype:

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

Object.foo === MyClass.prototype.foo; // true

It depends on Object. If it is a function you want to use the new Object() method. If it is a "virtual class" (defined using Object = {someProperty: someValue}) then you use the second method.

Some more pointers in this page on prototype inheritance in JavaScript

MyClass.prototype.method1: function () {/**/};

Correction to the above: it should be

MyClass.prototype.method1 = function () {/**/}; 

(Note the equals sign after 'method1').

The colon is used only when the method definition is itself within an object definition, like:

var myObject = {myVar1: 10, myMethod1: function() { /* */};
发布评论

评论列表(0)

  1. 暂无评论