Подсказка: не используйте new
для объявления объектов.Object.create - это правильный способ создания объектов JavaScript.Поддерживается во всех современных браузерах.Для других браузеров в нижней части этой статьи есть хороший шим:
http://javascript.crockford.com/prototypal.html
Одна проблема с конструкторами, которые используют 'new', состоит в том, что если люди случайно вызывают его как обычную функцию, он будет вносить изменения в глобальную переменную (т. е. в окно в браузере), используя переменную this
, поэтому this
следует резервировать только для функций-прототипов, и я предпочитаю использовать that
вместо this
Я лично использую стиль, который поддерживает new obj()
, obj()
и obj.init()
, который может быть одним дополнительным указателем на функцию, но я думаю, что он добавляет семантическое значение
function obj(){
var that = Object.create(obj.prototype)
//any constructor logic goes here
return that
}
obj.prototype = Object.create(Superclass.prototype)
obj.init = obj //completely optional
//other function declarations
obj.prototype.someFunction = function(){
//logic for someFunction
}