2015-03-25 20 views
2

是否有可能創建一個可以使用其原型上的方法實例化函數的類?我試圖將代碼從原型結構轉換爲使用es6類語法。這裏是起點創建一個使用es6類語法創建Function對象作爲實例的類

function createFun(init) { 
    function fun(newDats) { 
    this.data = newDats; 
    // create universe 
    } 
    function internalMethod() { 
    } 
    fun.data = init; 
    fun.aMethod = function() { 
    internalMethod(); 
    } 
    assign(fun, AnExtendableClass.prototype); 
    return fun; 
} 

// and can be used as such 
fun = createFun('first'); 
fun('second'); 
fun.aMethod(); 
fun.methodFromExtendableClass('third') 

的做作和過度簡化的例子,這就是我試圖

class Fun extend AnExtendableClass { 
    constructor(init) { 
    super(); 
    this.data = init; 
    function fun(newDats) { 
     this.data = newDatas; 
     //create universe 
    } 
    assign(fun, this); 
    return fun; 
    } 

    aMethod() { 
    } 
} 

不幸的是,這並不在沒有回報的工作方法和功能。

+0

什麼是'assign()'? – JLRishe 2015-03-25 05:27:30

+0

使用一個類來創建不是自身實例的東西有什麼意義?有一個產生這個類的函數似乎更合理。將「樂趣」變成一個班級是有道理的。把'createFun'變成一個類是沒有意義的。 – 2015-03-25 05:27:46

+0

@FelixKling把樂趣變成一個班是我正在努力完成的。 createFun只是一個類實例化器。我有其他創建函數,我正在轉換成直接類成功,但這一個類是一個函數對象與方法,這給我的問題。 – 2015-03-25 14:50:06

回答

1

是否有可能創建一個類來實例化其原型上的方法的功能?

是,與ES6有可能繼承Function - 然而,這不完全是不錯的,因爲構造函數需要的代碼串:

class Fun { 
    constructor() { 
     super("newDats", ` 
      this.data = newDats; 
      // create universe 
     `) 
    } 
    data() { } 
    aMethod() { } 
} 

let fun = new Fun; 
fun(…); 
fun.aMethod(…); 

我試圖代碼從原型結構轉換使用es6類語法。這裏是一個人爲和簡化的起點示例

不要使用class的語法。新的語法非常有限,只能用於標準類聲明。如果你做了任何奇怪的事情 - 從構造函數返回函數,從其他類複製方法,分配靜態屬性和使用內部方法在這方面肯定是奇怪的 - 然後使用「舊」,明確的方式。新的​​給你更多的自由。

+0

謝謝@Bergi我想讓這段代碼保持原樣更有意義。能夠從類創建函數似乎是應該可以在JavaScript中執行的東西,但我想這不在此語法的意圖之內。 – 2015-03-25 17:56:18

相關問題