При разработке OOJS я должен ссылаться на функцию прототипа или версию переменных? - PullRequest
1 голос
/ 27 июля 2010

Как объясняет заголовок (вроде), когда я создаю прототип в JS, и мне нужно сослаться на другую функцию объекта, должен ли я получить доступ к его прототипной версии или версии локальных переменных?Есть ли какие-либо (серьезные) проблемы с накладными расходами, связанные с любым из них?

//starting off
Foo = function(){ }

Foo.prototype.ShowMessage = function(msg){
  alert(msg);
}

//method 1
Foo.prototype.Validate = function(msg){
  //some validation stuff...
  if(!Valid){
    this.ShowMessage("Please check your inputs, there seems to be a problem with them.");
  }
}

//method 2
Foo.prototype.Validate = function(msg){
  //some validation stuff...
  if(!Valid){
    Foo.prototype.ShowMessage("Please check your inputs, there seems to be a problem with them.");
  }
}

Я бы предпочел метод 1, просто потому, что его легче набрать, чем Foo.prototype, но имеет ли значение производительность, какая из них?Или я просто делаю это?

Ответы [ 2 ]

3 голосов
/ 27 июля 2010

Вы обязательно должны использовать

this.showMessage("msg");

Вторая версия просто не будет работать должным образом. Зачем? Потому что этот вызов showMessage приведет к тому, что его переменная "this" будет указывать на этот объект-прототип, а не на экземпляр. Это почти наверняка не то, что вы хотите.

0 голосов
/ 27 июля 2010

Если вы хотите иметь метод экземпляра, используйте ссылку. *В противном случае, если вы хотите использовать метод класса, вы можете использовать следующее:

//starting off
Foo = function() {
};

Foo.prototype.ShowMessage = function(msg) {
    alert("Instance message: " + msg);
};

Foo.ShowMessage = function(msg) {
    alert("Class message: " + msg);
};

Foo.prototype.Validate = function(msg) {
    //some validation stuff...
    if (!Valid) {
        this.ShowMessage("Please check your inputs, there seems to be a problem with them.");
        Foo.ShowMessage("Please check your inputs, there seems to be a problem with them.");
    }
};
...