我想在父类中创建一个方法,该方法将返回扩展它的每个子类的位置。
// Class A dir is '/classes/a/
class A{
getPath(){
console.log(__dirname);
return (__dirname);
}
}
// Class B dir is '/classes/b'
class B extends A{
}
new A().getPath(); // Prints '/classes/a'
new B().getPath(); // Prints '/classes/a' (I want here '/classes/b');
我理解为什么B类打印A的位置,但我正在寻找在父类上创建一个方法的选项,该方法将打印子类的位置。我不想覆盖每个子类中的方法,因为它缺少点
我也试过process.pwd()
。
答案 0 :(得分:1)
如果您采用稍微更加粗暴的方法(将来可能需要更新),您可以非常轻松地检索子类的路径。你的类扩展了另一个类(或者没有扩展任何东西的类):
/* For this method we need to have the constructor function itself. Let us pretend that this
* was required by a user using our framework and we have no way of knowing what it actually
* is from the framework itself.
*/
let B = require('path-to-b')
let path = require('path')
let dirOfB
for (let [, val] of require('module')._cache)
if (val.exports === B)
dirOfB = path.dirname(val.filename)
console.log(dirOfB)
// Expected output: path-to-b
为了检索该类的路径,我们可以执行以下操作:
provider.GetService<People>().GetPhone(iphone4S).Use<IPhone>(phone => phone.Call("123456"));
这种方法,即使有点hacky,如果我们有构造函数,但不确定它实际上位于其中的目录,效果很好。
答案 1 :(得分:0)
您只能覆盖该方法。如果您不希望这样,那么您不应该使用继承,因为这是基于继承定义。