我正在尝试实现一种在 JavaScript 中实现继承的方法。首先我定义了基类,如下:
function Person(name){
name = name + "!"; //I want to reuse this code for initialization
this.getName = function(){
return name;
};
this.setName = function(_name){
name = _name;
};
};
然后我定义子类。碰巧我需要一种方法来调用基类构造函数。VipPerson
理想情况下,当我仍然有参数参考时,我会从构造函数中调用它name
。但是,如果我从那时开始这样做,它根本不起作用,并且如果我尝试getName
从基类访问,我会收到一个错误VipPerson has no getName method
。
function VipPerson(name, vipLevel){
this.getVipLevel = function(){
return vipLevel;
};
//the line below would not work!
//VipPerson.prototype = new Person(name);
};
VipPerson.prototype = new Person(); //but this would. not ideal IMO
我从外部设置原型的缺点VipPerson
是我丢失了对传递的参数的任何引用。
有没有优雅的方法来解决这个问题?我想要这个干净的界面:
var foo = new Person("Foo");
console.log(foo.getName());
var bar = new VipPerson("Bar", 100);
console.log(bar.getName()); //error
console.log(bar.getVipLevel());