Показать сообщение отдельно
  #4 (permalink)  
Старый 18.09.2009, 23:55
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от sig_al
Описываю объект:
Сообщение от sig_al
var newObj = function(){ ... }
Хоть это и объект (функции - тоже объекты), но здесь Вы описывается конструктор объектов. И этот конструктор уже будет порождать Ваши объекты. При этом, this внутри этого конструктора будет ссылаться на создаваемый объект.

А зачем Вы описываете методы отдельно и потом присваиваете ссылки на них this-методам? В данном случае, можно сразу описать this-методы, без промежуточных описаний отдельных независимых (глобальных) функций.

var newObjConstructor = function () {
  this.property = 'prop1';
  this.method1 = function () {
    var result = this.method2();
  };
  this.method2 = function () {
    this.property = 'PROP1';
  };
};


А это уже объект, порождённый Вашим конструктором:

var newObj = newObjConstructor();
newObj.method1();
newObj.method2();


Но лучше описывать методы в прототипе, так будет использована одна копия метода на все объекты, порождаемые от конструктора (в случае же, когда Вы описываете методы в самом конструкторе, каждый объект будет иметь свой собственный метод, что повлечёт увеличение расхода памяти):

var newObjConstructor = function () {
  this.property = 'prop1';
}

newObjConstructor.prototype.method1 = function () {
  var result = this.method2();
};
newObjConstructor.prototype.method2 = function () {
   this.property = 'PROP1';
};

var newObj1 = new newObjConstructor();
var newObj2 = new newObjConstructor();
alert(newObj1.method1 === newObj2.method1); // true
__________________
Тонкости ECMAScript
Ответить с цитированием