我是Javascript的新手,只需要掌握这个。
如果我有一个属性
的类function myClass(){
this.foo=null;
}
然后我使用继承来创建子类
myChild.prototype = new myClass();
function myChild(){
alert(this.foo);
}
如何在实例化子类时设置foo的属性,例如我想提醒'bar'。我不想简单地将'bar'传递给myChild,因为我有一个要设置的属性列表,它们与myClass中的方法相关,而不是myChild。
var newChild = new myChild();
答案 0 :(得分:0)
你可以在子的构造函数中设置属性,如下所示:
myChild.prototype = new myClass();
function myChild(){
this.foo = "bar";
}
这就是你想要的吗?
或者,如果您想要灵活地了解每个实例中包含foo
的内容,您可以在实例化子类后立即设置它:
var child = new myChild();
child.foo = "bar";
答案 1 :(得分:0)
参数化你的构造方法。
function myClass(foo){
this.foo=foo;
}
myChild.prototype = new myClass('bar');
function myChild(){
alert(this.foo);
}
var newChild = new myChild();
或:
function myClass(){
this.foo=null;
}
myChild.prototype = new myClass();
myChild.prototype.foo = 'bar';
function myChild(){
alert(this.foo);
}
var newChild = new myChild();
答案 2 :(得分:0)
您实际上也可以找到这个问题的答案in my answer to previous question,它类似于其他语言的继承。
如果扩展一个类,子类的构造函数必须接受自己的参数和为父类的参数。所以假设你有:
function Parent(a) {
this.foo = a;
};
// and
function Child(b, a) {
Parent.call(this, a); // executes the parent constructor for this instance
this.bar = b;
alert(this.foo);
};
inherits(Parent, Child);
(inherits
的实施可以在this answer)中找到。
在Child
内,您必须调用父类的构造函数并传递参数,类似于您在Java或Python中的操作方式。
如果您有许多参数,那么您可以使用arguments
对象,以使事情变得更容易:
function Parent(a, b, c, d) {...};
function Child(e, f) {
// c and d are parameters for `Child`
// arguments[0] == e
// arguments[1] == f
// all other arguments are passed to Parent, the following
// creates a sub array arguments[2..n]
Parent.apply(this, [].slice.call(arguments, 2);
/...
}
// later
var child = new Child(e, f, a, b, c, d);
通常,myChild.prototype = new myClass();
不是一个好的继承模式,因为大多数时候,类都需要一些参数。这不会为每个实例执行父构造函数,但只对所有实例执行一次。