javascript如何从超类中获取子类'__dirname'

时间:2017-01-18 06:34:24

标签: javascript node.js es6-class

我想在父类中创建一个方法,该方法将返回扩展它的每个子类的位置。

// 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()

2 个答案:

答案 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)

您只能覆盖该方法。如果您不希望这样,那么您不应该使用继承,因为这是基于继承定义。