переменные, когда функция JavaScript используется в качестве основы для объекта - - PullRequest
1 голос
/ 15 февраля 2012

В чем преимущество использования «this.name» вместо «name», когда в качестве основы для объекта используется функция javascript -

function cat(name) {    
    this.name = name;
    this.talk = function() {
        alert( this.name + " says meeow!" )
        alert( name  + " says meeow!" )
    }
} 

cat1 = new cat("Sylvester")
cat1.talk()  

Ответы [ 3 ]

2 голосов
/ 15 февраля 2012

Смысл использования this.variable вместо variable таков, что вы можете ссылаться на переменную вне области конструктора, не загрязняя глобальное пространство имен.

В вашем примере talkфункция добавлена ​​в конструктор.Для более объектно-ориентированного подхода к JavaScript функция talk обычно определяется в Cat s prototype:

function Cat(name) {
    this.name = name;
}
Cat.prototype = {
    talk: function () {
        alert(this.name + ' says meeow!');
    }
};

Обратите внимание, что функция не установлена ​​в конструкторе?Функция разговора не будет иметь ссылки на name за пределами вызывающего объекта.

Кроме того, после создания экземпляра объекта Cat пользователь может переопределить значение, обратившись к свойству напрямую:

var a = new Cat('bob');
a.talk(); //'Bob says meeow!'
a.name = 'Joe';
a.talk(); //'Joe says meeow!'

Использование this также важно, если вы планируете вызывать функцию в разных контекстах объекта:

function foo(bar) {
    this.baz = bar;
}

foo('fizz'); //sets window.baz === 'fizz'

var a = {};
foo.call(a, 'buzz'); //sets a.baz === 'buzz'

Если вы не хотите, чтобы значение быловнешне редактируемые после вызова конструктора, безусловно, объявляют функцию в области конструктора для инкапсуляции значения и предотвращения дальнейшей модификации.

0 голосов
/ 15 февраля 2012

Если вы хотите изменить имя!

cat1 = new cat("Sylvester");
cat1.name = 'Tom';
cat1.talk();​​

name по-прежнему "Sylvester"

this.name сейчас "Tom"

0 голосов
/ 15 февраля 2012

Попробуйте прочитать это:

http://www.quirksmode.org/js/this.html

в основном, когда вы используете ключевое слово "this", вы ссылаетесь на переменную, которая специфична для того, чем является "this", которое вПримером вашего примера является объект cat. Например,

, если у вас есть переменная javascript с именем color, и у вас есть объект cat, имеющий переменную цвета, если вы хотите сослаться на переменную цвета в области видимостиопределенного объекта, вы бы использовали this.color вместо color.

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