簡體   English   中英

在從Node JS模塊導出的Class中引用靜態方法

[英]Referencing static method in Class exported from Node JS module

問題是如何從NodeJS模塊導出的類的靜態方法中引用其他靜態方法? 這是一個設置。 我有以下模塊: test1.js

var Parent = class  {
    static smethod1 () {
        return this.smethod2();
    }

    static smethod2 () {
        return "Testing tube";
    }
}

module.exports = {
    Parent:Parent
}

然后我有require這個模塊的test2.js

var mod = require('./test1');
var Parent = mod.Parent;

module.exports = {
    sm1: Parent.smethod1,
    sm2: Parent.smethod2
}

最后,我有一個正在run.js中運行的run.js

var test2 = require('./test2');

console.log(test2.sm1());

自然,我想看到打印出的"Testing tube"行。 我遇到錯誤

        return this.smethod2();
                    ^

TypeError: this.smethod2 is not a function 

當然,在NodeJS上有一個惡作劇, this指的是模塊,但不是應該指代函數嗎? 有沒有辦法使用當前設置從smethod1引用靜態方法smethod2 如果沒有,有什么解決方法?

this關鍵字在JavaScript中有點怪異,並不像大多數基於類的語言一樣總是引用您的實例。 在您的情況下,當您調用test2.sm1()this對象將設置為test2對象,即

{
    sm1: Parent.smethod1,
    sm2: Parent.smethod2
}

該對象沒有smethod2函數。

this系統會根據函數是如何被調用JavaScript中設置,特別是與無論是之前的“ . ': ->test2<-.sm1()

有幾種解決方法。 首先,在定義Parent類之后,您可以this函數綁定到該類:

var Parent = class  {
    static smethod1 () {
        return this.smethod2();
    }

    static smethod2 () {
        return "Testing tube";
    }
}

// bind `this` to `Parent`
Parent.smethod1 = Parent.smethod1.bind(Parent);

module.exports = {
    Parent:Parent
}

或者,您可以將Parent作為參數傳遞給callapply ,這僅針對一次調用手動設置this參數:

var Parent = require('./test1');
var test2 = require('./test2');

// call `test2.sm1` with a context of `Parent`    
console.log(test2.sm1().call(Parent));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM