javascript - 子类不继承父类(super class)的属性

标签 javascript oop inheritance

在定义子类时,我得到了构造函数参数的 TypeErorr:undefined ,正如我所见,它充当占位符。到底发生了什么以及如何解决?

function Class(object) {
    this.name = object.name;
}

var myClass = new Class({
    name: "ClassName"
})

console.log(myClass.name); 

function SubClass(object) {
    this.name = object.name;
}

SubClass.prototype = new Class();
SubClass.prototype.constructor = SubClass;

var mySubClass = new SubClass({
    name: "SubClassName"
})

//类型错误:对象未定义

最佳答案

通常,您的基类在其原型(prototype)上会有方法,因此使用 SubClass.prototype = Object.create(BaseClass.prototype) 更合适,并且还在基类中调用您的父构造函数class' 构造函数,以便可以在父构造函数中找到 object.name (这是您收到的错误,因为没有任何内容传递到 SubClass.prototype = new Class().

function Class(object) {
    this.name = object.name;
}

Class.prototype.sayName = function () {
    return this.name;
}

var myClass = new Class({
    name: "ClassName"
});

console.log(myClass.name); 

function SubClass(object) {
    // call parent constructor with context of the new SubClass instance
    Class.call(this, object);
}

SubClass.prototype = Object.create(Class.prototype);
SubClass.prototype.constructor = SubClass;

var mySubClass = new SubClass({
    name: "SubClassName"
});

console.log(mySubClass.sayName());
// > "SubClassName"

这里有一些有用的引用

关于javascript - 子类不继承父类(super class)的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19870711/

相关文章:

java - java中判断一个类的父类(super class)是否实现了某个接口(interface)

c++ - 为什么这在 C++ 构造函数中不起作用

javascript - Mocha 测试用例 - 嵌套 it() 函数是否符合规定?

javascript - 如何让Angular的 'filter'过滤器深度过滤?

javascript - 条形 Highcharts 中 stackLabels 格式化程序中的 X 轴值

C#-调用覆盖版本的方法的基本版本

java - 重写 equals() 方法以检查共享继承的对象中的维度相等性

javascript - 通过外部交互更新 React 组件状态

c# - 使用单一方法类——最好的方法?

oop - 向面向对象的程序员和技术含量较低的人解释函数式编程