2015-11-18 121 views
0

我目前在我的JavaScript項目上使用ALTJS,所以我幾乎堅持使用ES6類。有沒有辦法在ES6類上有內部方法?

我的問題是關於上述課程。有沒有私人內部方法的方法?例如:

class something() { 
    constructor(){} 
    methodOne(){} 
    methodTwo(){} 
} 

您不能從方法一和方法二中訪問方法二。在那種情況下,具有內部效用函數的正確方法是什麼?例如,一些完成計算的代碼,即多個方法應該使用的代碼,我不想重複多次(DRY)。

我知道有靜態方法。然而,看起來奇怪的是,我必須通過調用something.staticMethod來訪問它們。在這種情況下,該方法不需要公開。

我已經在網上閱讀了很多es6類文章,他們似乎都沒有解決這個問題。

謝謝!

回答

1

JavaScript對象總是「完全暴露」 。如果您有權訪問某個對象,則可以完全遍歷該對象,並且當前無法限制該對象。

什麼可以做的是遁形的「私人」或「內部」使用功能或數據的幾種方法:

  1. 如果使用一個模塊系統,只導出公共部分:

    function priv() { 
        //do something 
    } 
    
    export class TheClass { 
        myMethod() { priv(); } 
    } 
    
  2. 您可以在IIFE包裝你的代碼:

    const TheClass = (function() { 
        function priv() { 
        //do something 
        } 
    
        return class TheClass { 
        myMethod() { priv(); } 
        } 
    })(); 
    
1

是的,你只是把「內部」的方法以外的東西導出。

function privateMethod() { 
    //Do some private stuff. 
} 

export default somefunction() { 
    //Do some stuff 
    privateMethod(); 
} 

,或者如果你想有你的helper方法在一個單獨的文件,並將其導入,當你需要的時候,你可以這樣來做:

import { methodOne, methodTwo } from "./helpers.js"; 

export default somefunction() { 
    //Do some stuff 
    methodOne(); 
} 
+0

這與ES6類有什麼關係? – Ajedi32

+1

我的歉意。然而,前提依然如此。 我想我的答案是可行的,如果你通過給他們自己的文件並從那裏去建立類,大多數人做的。這樣,唯一公開可用的方法是那些從您的類文件定義的文件中導出的方法。 – Pytth

相關問題