的Javascript实例子类与父属性
我新的Javascript功能来OOP和只需要得到与此交手。的Javascript实例子类与父属性
如果我有一个特性
function myClass(){
this.foo=null;
}
然后我用继承来创建一个子类
myChild.prototype = new myClass();
function myChild(){
alert(this.foo);
}
如何实例子类如我希望当我设置foo的属性的类提醒'酒吧'。我不想简单地传递“酒吧”到myChild因为我有相关的MyClass中的方法,而不是myChild属性来设置的列表。
var newChild = new myChild();
实际上,你可以找到这个问题的答案也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
你必须调用父类的construtor和传递的参数,类似于你如何在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();
是不是一个很好的遗传模式,因为大多数的时间,班级期待一些论点。这不会为每个实例执行父构造函数,而只对所有实例执行一次。
谢谢felix接受答案,因为它回答我的问题,但我意识到我可以做到这一点更简单的实例化对象的一些参数,然后调用带有额外参数的方法新线,而不是试图一口气做到这一切。 – user1209203 2012-03-05 17:32:13
你可以只设置属性在孩子的构造,像这样:
myChild.prototype = new myClass();
function myChild(){
this.foo = "bar";
}
这是你想要的吗?
或者,如果你想成为灵活什么foo
包含在每一种情况下,你可以设置它的子类的实例化后右:
var child = new myChild();
child.foo = "bar";
参数化的施工方法。
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();
我不能做到这一点,因为每个对象都会得到不同的值 – user1209203 2012-03-05 14:38:53
这是你想要的吗? 'myChild.prototype.foo ='bar';' – 2012-03-05 14:43:13
你的第一个片段缺失'()',如果你想字符串'bar'那么你需要引用它。 – pimvdb 2012-03-05 14:25:24
编辑,修复错误 – user1209203 2012-03-05 14:26:13
我不知道,你想通过'“酒吧”'。哪个功能应该接受并设置它?该子类应设置它,但你不希望它传递到子类 - 你能否详细说明吗? – pimvdb 2012-03-05 14:28:06