/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)中使用它们。
答案 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