我要解决的问题是将参数传递给对象子类的构造函数。
此代码(该函数不带参数)有效。它包括两种方案,一种创建MyClass的实例,另一种创建MySubClass的实例:
<input type="button" value="Scenario 1" onclick="Scenario1()" />
<input type="button" value="Scenario 2" onclick="Scenario2()" />
function MyClass() {
this.value = "test";
}
MyClass.prototype.function = function(){
alert(this.value);
}
function MySubClass() {
}
MySubClass.prototype = new MyClass();
function Scenario1() {
var myClass = new MyClass();
myClass.function();
}
function Scenario2() {
var mySubClass = new MySubClass();
mySubClass.function();
}
单击任一按钮都会在警告框中显示“测试”。
现在,我要执行的操作是使MyClass函数带有参数。对于直接创建MyClass的实例,这可以正常工作。但是MySubClass的实例不起作用。从概念上讲,这就是我想要的:
function MyClass(val) {
this.value = val;
}
MyClass.prototype.function = function(){
alert(this.value);
}
function MySubClass(val) {
}
MySubClass.prototype = new MyClass();
function Scenario1() {
var myClass = new MyClass("scenario 1");
myClass.function();
}
function Scenario2() {
var mySubClass = new MySubClass("scenario 2");
mySubClass.function();
}
方案1按预期显示“方案1”。在方案2中,永远不会设置“值”成员。从我的语法来看,显然是这样。
是否有可以实现我所追求的语法?请注意,任何解决方案的约束条件是必须将“函数”添加到MyClass原型中,而不是被定义为内部函数(例如this.function = function())
答案 0 :(得分:1)
这是实现继承的方式。将值传递到原型链的方法是调用父构造函数并传播参数。
function Parent(x) {
this.x = x;
}
Parent.prototype.showX = function() {
console.log(this.x);
}
function Child(x) {
Parent.call(this, x); // call the parent constructor
}
Child.prototype = Object.create(Parent.prototype);
new Child('example').showX()