requirejs定義的模組返回的永遠是單例對象,可以藉助javascript中的類解決模組間的相互幹擾問題

來源:互聯網
上載者:User

requirejs定義的模組返回的永遠是單例對象,可以藉助javascript中的類解決模組間的相互幹擾問題

RequireJS中定義一個模組,總的來說有2種方式:簡單鍵值對和函數依賴式。

1.簡單鍵值對:一個模組僅含有值對,沒有任何依賴

define({    color: "black",    size: 1,    method1: function() {},    method2: function() {}});

這種寫法雖然簡單,但是有很大的局限性,僅僅是定義了該模組的返回值,不能做一些額外的初始化工作。

通過下面下面這種方式來定義模組,靈活性更高,我們可以在函數體內寫一些模組初始化的代碼。

define(function () {    //Do initial work here    return {        method1: function() {},        method2: function() {}    };});


2.函數依賴式: 則第一個參數是依賴的名稱數組;第二個參數是回呼函數。

在模組的所有依賴載入完畢後,回呼函數會被調用來定義該模組。

define(["module1"], function(moudle1) {        function calc(){return moudle1.val;}return {"get":calc};    });


這2種定義模組的方式是等價的,requirejs能夠保證一個模組只會被載入一次,所以如果A、B模組都依賴於C模組,那麼其實A和B模組使用的都是同一個對象。

//C模組define([],function(){ var count = 0;function sayCount(){count++;return count;}return {"say":sayCount};}); // A模組require(['C'],  function(module) {         cosole.log(module.say());//1}); // B模組require(['C'],  function(module) {cosole.log(module.say());//2});



如果我們定義了一個模組,很多時候我們希望它能夠被多個模組使用而不會相互幹擾。

//C模組define([],function(){  // 定義一個類 function DemoClass() {var count = 0;this.say = function(){count++;return count;}; }  return function(){//每次都返回一個新對象return new DemoClass(); };}); // A模組require(['C'],  function(module) {         cosole.log(module().say());//1}); // B模組require(['C'],  function(module) {cosole.log(module().say());//1});

每次調用模組C,返回都是一個新的對象,通過這種方式能夠避免A和B模組在使用模組C時候的幹擾和衝突。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.