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

时间:2011-12-03 16:17:41

标签: javascript class parent-child hierarchy

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

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

有人可以向我解释为什么会发生这种情况并帮助我找到比将子类本身作为参数传递更好的解决方案吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

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