Я написал два класса на днях, где мне нужно было переопределить и вызвать переопределенный метод (getQuery).
//parent
function SimpleUser() {
this.firstName = "X";
}
SimpleUser.prototype.getQuery = function(sub) {
//solution for not getting undefined variables
var that = sub || this;
var query = "first="+that.firstName;
return query;
}
//child
function User() {
//extends
this.base = SimpleUser;
//super()
this.base();
//prints "X"
console.log(this.firstName);
this.lastName = "Y";
}
//override
User.prototype.getQuery = function() {
//call parent
var query = SimpleUser.prototype.getQuery.call(this);
query += "&last="+this.lastName;
return query;
}
//prints "first=X"
console.log(new SimpleUser().getQuery());
//prints "first=undefined&last=Y" if I don't use parameter "sub"
console.log(new User().getQuery());
Когда я вызываю метод "getQuery" из подкласса, все переменные в родительском элементе не определены. Если я вызываю их из конструктора подкласса, они в порядке.
Я решил проблему, передав подкласс в качестве параметра и просто проверив, кто спрашивает.
Может кто-нибудь объяснить мне, почему это происходит, и помочь мне найти лучшее решение, чем то, что я должен был сделать, передав сам подкласс в качестве параметра?
Спасибо!