【问题标题】:Pass Parameter to Javascript Subclass [duplicate]将参数传递给Javascript子类[重复]
【发布时间】:2019-06-14 06:16:04
【问题描述】:

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

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

【问题讨论】:

  • 你考虑过使用 ES6 类语法吗?
  • 没有。几十年来我一直使用类似的语法,并且喜欢这个原型的东西作为一种变化。
  • class 语法仍然有原型的东西,它只是在语法上防止继承错误......

标签: javascript inheritance prototype subclass


【解决方案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()

【讨论】:

  • 太棒了,谢谢,这行得通,甚至在语法上也有意义!
猜你喜欢
  • 2012-11-13
  • 2013-07-09
  • 2014-12-27
  • 2013-04-06
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
相关资源
最近更新 更多