将参数传递给 Javascript 子类



我要解决的问题是将参数传递给对象子类的构造函数。

此代码 - 函数不带参数 - 有效。它包括两个场景,一个创建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();
}

单击任一按钮都会显示一个显示"test"的警告框。

现在,我想做的是让函数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())

这就是实现继承的方式。在原型链上传递值的方法是调用父构造函数并传播参数。

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()

最新更新