Может кто-нибудь скажет мне, где в 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
ссылку на конструктор Object, и это функция, а не новый объект.
Я лично предпочитаю второй, объект literal или инициализатор:
MyClass.prototype = {prop1: 'value', prop2: 'value2'};
//...
MyClass.prototype.foo = 'bar';
MyClass.prototype.method1: function () {/**/};
Изменить: В ответ на ваш комментарий пустой литерал объекта { }
по существу эквивалентен new Object()
из-за этого:
Производственный объектLiteral: {} является оценивается следующим образом:
- Создайте новый объект, как если бы с помощью выражения new Object().
- Результат возврата (1).
Подробнее см. раздел 11.1.5 (Инициализатор объектов) Спецификация языка ECMAScript (pdf).
Изменить:. Третий пример не приведет к ошибкам, но не совсем хорош, например, вы можете легко скрыть функцию конструктора объектов, если впоследствии вы откроете MyClass.prototype:
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() { /* */};