2017-06-15 20 views
1
  1. 在ES5中,我通過使用IIFE創建模型 - 視圖 - 控制器結構並顯示模塊模式。如何在ES6的JavaScript中做MVC?

    var model = function() { ... }() 
    var view = function() { ... }() 
    var controller = function (model, view) { 
        view.functionname(var one); 
        ...... 
    }(model, view) 
    

新塊範圍{}在ES6可以取代IIFEs,但我們如何調用來自控制器的模型/視圖的功能/方法?

  • 爲了在ES5合併多個JavaScript和避免命名衝突我使用的表達式:

    ;(code ...) 
    
  • 如何在ES6被做?

    +1

    'view.function(品種之一);'是無效JS。 ';(code ...)'不能避免命名衝突。它可以解決自動分號插入問題。不確定你在問什麼。此外,限制你的問題只有一個問題。 – trincot

    +0

    爲什麼你認爲調用'view.functionname(...)'成爲ES6中的其他東西? – Bergi

    +0

    我更新了代碼,它只是作爲佔位符,因爲我想了解這個概念; (代碼)我只是想說,我強迫對裏面的東西進行評估 – user3541631

    回答

    1

    在ES6的新的塊範圍可替代IIFEs

    不是真的。它可以替代僅僅引入範圍的IIFE,但它不能替代模塊模式 - 塊沒有返回值。也沒有任何爭論。您可以使用全局變量:

    var model, view, controller; 
    { 
        model = {…}; 
    } 
    { 
        view = {…}; 
    } 
    { 
        let one = …; 
        view.functionname(one); 
        controller = {…}; 
    } 
    

    但說實話這是相當奇怪的。沒有理由不使用自ES3以來我們知道的完全相同的揭示模塊模式。

    1:一種可行的替代方案將是ES6模塊,其允許循環依賴和具有更好的語法所有這

    -1

    也許這樣?

    class View { 
        exampleMethod() { 
         console.log("view's example method called") 
        } 
    } 
    
    class Model { 
        exampleMethod() { 
         console.log("model's example method called") 
        } 
    } 
    
    class Controller { 
        constructor(view,model) { 
         this.view = view 
         this.model = model 
         console.log("Test") 
        } 
        exampleMethod() { 
         this.view.exampleMethod() 
         this.model.exampleMethod() 
        } 
    } 
    
    const myView = new View() 
    const myModel = new Model() 
    
    const myController = new Controller(myView,myModel) 
    myController.exampleMethod() 
    

    爲了避免ES6名稱衝突,你可以換到一切

    (()=>{ 
        // Code... 
    })()