繁体   English   中英

javascript 如何从超级 class 获取子类 '__dirname'

[英]javascript how to get subclass '__dirname' from super class

我想在父 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');

我明白为什么 class B 会打印 A 的位置,但我正在寻找一个选项,可以在父 class 上创建一个方法,该方法将打印子类的位置。 我不想覆盖每个子类中的方法,因为它没有抓住要点

我也试过process.pwd()

如果您采用稍微更加粗暴的方法(可能需要在将来更新),则可以非常轻松地检索子类的路径。 你的类扩展了另一个类(或者没有扩展任何东西的类):

module.exports = class B extends A
{ 
    // TODO: implement
}

为了检索该类的路径,我们可以执行以下操作:

/* 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

这种方法,即使有点hacky,如果我们有构造函数,但不确定它实际上位于其中的目录,效果很好。

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

使用实例变量

// Class A dir is '/classes/a/
class A{    
    __dirname = __dirname;
  
    getPath(){
        return this.__dirname;
    }
}

// Class B dir is '/classes/b'
class B extends A{
  __dirname = __dirname;
}

new A().getPath(); // Prints '/classes/a'
new B().getPath(); // Prints '/classes/a' (I want here '/classes/b');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM