Смысл использования 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'
Если вы не хотите, чтобы значение быловнешне редактируемые после вызова конструктора, безусловно, объявляют функцию в области конструктора для инкапсуляции значения и предотвращения дальнейшей модификации.