2017-03-12 263 views
1

對於令人困惑的標題,我真的不知道如何命名我想要做的事。 我現在有這樣的代碼:抽象對象或創建類對象

const utils = (function() { 

    const tabsWithAudio = { 
    tabsArray: [], 
    add: function (tabId) { 
     const index = this.tabsArray.indexOf(tabId); 
     if (index < 0) { 
     this.tabsArray.push(tabId); 
     } 
    }, 
    remove: function (tabId) { 
     const index = this.tabsArray.indexOf(tabId); 
     if (index >= 0) { 
     this.tabsArray.splice(index, 1); 
     } 
    }, 
    contains: function (tabId) { 
     return (this.tabsArray.indexOf(tabId) > -1); 
    }, 
    }; 


    const tabsWithWidget = { 
    tabsArray: [], 
    add: function (tabId) { 
     const index = this.tabsArray.indexOf(tabId); 
     if (index < 0) { 
     this.tabsArray.push(tabId); 
     } 
    }, 
    remove: function (tabId) { 
     const index = this.tabsArray.indexOf(tabId); 
     if (index >= 0) { 
     this.tabsArray.splice(index, 1); 
     } 
    }, 
    contains: function (tabId) { 
     return (this.tabsArray.indexOf(tabId) > -1); 
    }, 
    }; 

    return { 
    tabsWithAudio: tabsWithAudio, 
    tabsWithWidget: tabsWithWidget, 
    }; 
}()); 

module.exports = utils; 

然後我使用它們像這樣:

const utils = require('./modules/utils'); 

... 


utils.tabsWithAudio.add(123); 

.... 

但是由於所有的公益目標都是一樣的,我想創建一個類狀物體,我可以實例在旅途中,如:

let tabsWithAudio = new utils.tabsHelper(); 
utils.tabsWithAudio.add(123); 

我嘗試這樣做,但裏面的一切原型沒有得到出口我想:

const utils = (function() { 

    const tabsHelper = function() {}; 
    tabsHelper.prototype = { 
    tabsArray: [], 
    add: function (tabId) { 
     const index = this.tabsArray.indexOf(tabId); 
     if (index < 0) { 
     this.tabsArray.push(tabId); 
     } 
    }, 
    remove: function (tabId) { 
     const index = this.tabsArray.indexOf(tabId); 
     if (index >= 0) { 
     this.tabsArray.splice(index, 1); 
     } 
    }, 
    contains: function (tabId) { 
     return (this.tabsArray.indexOf(tabId) > -1); 
    }, 
    }; 



    return { 
    tabsHelper: tabsHelper, 
    }; 
}()); 

module.exports = utils; 

任何想法我錯過了什麼?此外,這是什麼叫btw。

謝謝你。

回答

0

嘿康韋爾我讀了你的問題,我的回答不會是任何'代碼'。你清楚地知道你的東西,我相信你只是在尋找一些澄清。

你知道這些代碼片段不是'類'是正確的。至少在古典意義上說。你所指的是'模塊'。更具體地說,您正在使用IIFE(創建閉包),然後返回一個對該IIFE中的函數具有引用的對象。這是一個使用閉包的模塊。

關於這種模式的更多信息可以在here找到。有一點需要注意。當使用'類'的'框架'。模塊沒有實例化,它們被返回。

JavaScript類實例化,但模式看起來不同。這裏是一個pseudoclassical instantiation patterns.的資源這裏是ES6 classes的鏈接,它們通常是語言標題的地方。還有一個link.關鍵字「new」僅與實例關聯。實例化與類相關聯。