Объявление переменных в классе JavaScript: это против var. Разница? - PullRequest
6 голосов
/ 19 марта 2012

В чем разница между объявлением внутренних переменных внутри класса JavaScript с помощью this против var ?

Пример:

function Foo( ) {
   var tool = 'hammer';
}

function Foo2( ) {
   this.tool = 'hammer';
}

Одна разницамы знаем, что Foo2.tool выдаст «молот», тогда как Foo.tool выдаст неопределенное.

Есть ли другие различия?Рекомендации для одного против другого?

Спасибо!

1 Ответ

17 голосов
/ 19 марта 2012

здесь нет ни «одного, ни другого», поскольку цель этих двух различна.

рассмотрим это:

var Melee = function(){

    //private property
    var tool = 'hammer';

    //private method
    var attack = function(){
        alert('attack!');
    };

    //public property
    this.weapon = 'sword';

    //public methods
    this.getTool = function(){
        return tool; //can get private property tool
    };
    this.setTool = function(name){
        tool = name; //can set private property tool
    };
};

var handitem = new Melee();
var decoration = new Melee();

//public
handitem.weapon;                 //sword
handitem.getTool();              //hammer
handitem.setTool('screwdriver'); //set tool to screwdriver
handitem.getTool();              //is now screwdriver

//private. will yield undefined
handitem.tool;
handitem.attack();

//decoration is totally different from handitem
decoration.getTool();            //hammer
  • handitem.weapon в ООП является «публичной собственностью», доступной извне. если я создал этот экземпляр Melee, я могу получить доступ и изменить weapon, так как он открыт для общественности.

  • handitem.tool является «частной собственностью». это доступно только изнутри объекта. он не виден, недоступен и не может быть изменен (по крайней мере, напрямую) извне. попытка доступа к нему вернет undefined

  • handitem.getTool - это «публичный метод». поскольку он находится внутри объекта, он имеет доступ к частной собственности tool и получает ее для вас извне. своего рода мост в частный мир.

  • handitem.attack - частный метод. Как и все личные вещи, к нему можно получить доступ только изнутри. в этом примере нет способа позвонить attack() (поэтому мы защищены от атаки: D)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...