JavaScript层次结构,为什么父变量未定义



前几天我写了两个类,我需要重写并调用被重写的方法(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"方法时,父类中的所有变量都是未定义的。如果我从子类的构造函数中调用它们,它们是没问题的。

我通过传递子类作为参数并检查是谁在询问来解决这个问题。

有人能向我解释一下为什么会发生这种情况,并帮助我找到一个更好的解决方案,而不是我必须通过子类本身作为参数?

谢谢!

Javascript没有类。它只有对象。对象继承它们的原型,而原型又继承它们的原型,以此类推。如果您想了解更多关于在javascript中进行继承的信息,请查看http://phrogz.net/js/classes/OOPinJS2.html。虽然这是可行的,但如果你想在javascript中模拟类和类继承,我建议使用专门为此设计的框架,如MooTools。

最新更新