ES6 JS类中的属性继承

时间:2017-08-03 12:59:41

标签: javascript node.js inheritance

/A.js具有以下代码;

class A {
    constructor(token) {
        this.token = token;
    }
    lok() {
        return 'hello';
    }
}
module.exports = A

/dir1/dir2/B.js具有以下代码;

let A = require(__dirname + '/../../A.js')
class B extends A {
    constructor(token) {
        super(token)
    }
    tok() {
        return this.token;
    }
}
module.exports = B

问题是,如何以这种方式从A类继承token属性;

let init = new A('123')
init.tok() //will return token

而我的问题是,如何从基类(A)继承在构造函数下声明的属性,以便我可以在子类(B)中使用它们。

2 个答案:

答案 0 :(得分:2)

执行let init = new A('123')时,您需要创建A类的实例。这意味着init仅包含A类的属性和方法,值得注意的是,init表示tok上没有B方法。

如果您执行let init = new B('123'),则将创建B类的实例,该实例也继承A类的属性。

super(token)的构造函数中的

B表示使用参数A调用token的构造函数,因此您设置了this.token = token。然后,您可以成功使用B - 实例init并致电tok

let init = new B('123')
init.tok() // '123'

您还可以在此lok上致电init,因为任何B个实例都会从A继承它:

init.lok() // 'hello'

答案 1 :(得分:2)

您的问题更多地与A 类型的任何对象不具有tok()方法的事实有关,因为它只在B中类。虽然A 具有token属性,但它无法使用该方法检索它。例如,你可以这样:

let init = new A('123')
// init.tok() // this will never work as the method only exists on `B` objects
console.log( .init.token ); // this will work fine because you add the property in the constructor