Почему _this.
не работает, но this.
работает.Javascript scope и self = this, _this = this, that = this
Я думал, что вся точка _this=this
должна была обеспечить механизм для вызова функций объекта, у вас есть «гарантированная» ссылка обратно на экземпляр объекта, так как теперь он находится в закрытии функции объекта, чтобы имитировать традиционный класс поведение. Я читал так много частей о сфере видимости, и по какой-то причине я просто не вижу этого. Что мне не хватает?
var PersonClass = function PersonClass(_name, _age) {
_this=this;
this.name=_name;
this.age=_age;
console.log("created "+this.name+":"+this.age);
function changeAge(num) {
console.log("changing age for:" + _this.name);
_this.age=num;
}
PersonClass.prototype.changeAge=changeAge;
PersonClass.prototype.getAge=function() {
console.log(_this.name+":"+_this.age);
return _this.age;
};
PersonClass.prototype.getAge2=function() {
console.log(this.name+":"+this.age);
return this.age;
};
};
// comments indicate what value is displayed in console
var john=new PersonClass("john",1); // john:1
var sue=new PersonClass("sue",2); // sue:2
john.getAge(); // sue:2
john.getAge2(); // john:1
john.changeAge(10); // sue
sue.getAge(); // sue:10
sue.getAge2(); // sue:10
john.getAge(); // sue:10
john.getAge2(); // john:1
Вероятно потому, что вы не 'var'd его. Вы тоже делаете что-то очень необычное с прототипированием там. Как вы его написали, это должны быть методы экземпляра, не унаследованные методы –
Это сломанный mish-mash двух разных способов написания «классов» в JS. – Alnitak
Не используйте глобальные переменные и не собирайте локальные объекты в прототипных методах. – SLaks