could anyone please tell me, where in Javascript the difference between
MyClass.prototype = new Object(); //or ... = {}
and
MyC
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() { /* */};
Your first two examples are completely 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 comment, an empty object literal { }
essentially equivalent to new Object()
because of this:
The production ObjectLiteral : { } is evaluated as follows:
- Create a new object as if by the expression new Object().
- 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