<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      通過Anuglar Material串串學客戶端開發 - NodeJS模塊機制之Module.Exports

      module.exports

      前文講到在Angular Material的第二個編譯文件docs/gulpfile.js中卻看到了一個奇怪的東西module.exports 那么module.exports是什么東西呢?

      一直以來,javascript最大的詬病就是全局變量,這也成為大型應用開發的最大阻礙。因此,很多人使用了很多方式來解決這個問題。如模塊模式(Module Pattern), 而node.js這實現了模塊裝載系統,來解決組件實現的基本問題。

      自從開始研究前端,我也幾個相關的關鍵詞在眼前晃蕩, require() exports等等。當時,因為注意力在其他方面,一直也沒下決心研究清楚。 就如下面文章中所講:

      作為開發人員常常面臨這樣的困境:當我們使用不熟悉的代碼(庫)時,我們究竟要花多少時間來研究它的原理和實現,這個研究又要有多深呢?經典答案就是,學習到足夠可以開始寫代碼就可以了,等到時間容許在進一步深入研究。

      那么現在就是深入研究 module.exports的時候了!

      Node.js如何定義和使用模塊

      傳統js文件

      這里是一個簡單的js文件,greeting.js,它的功能一看就明白:

      //greetings.js
      sayHelloInEnglish = function() {
      	return "Hello";
      };
      
      sayHelloInSpanish = function() {
      	return "Hola";
      };
      這里有兩函數也就是兩個功能。
      

      用模塊封裝簡單js文件

      i> 想象該文件第一行有以下代碼(是的,想象)

      // var exports = module.exports ={};
      

      ii> 把任何要重用(導出)的函數,賦值給exports

      exports.sayHelloInEnglish = function() {
      	return "Hello";
      };
      exports.sayHelloInSpanish = function() {
      	return "Hola";
      };
      

      iii> 以上的結果相當于做了以下的事情

      module.exports = {
      	sayHelloInEnglish = function() {
      		return "Hello";
      	};
      	
      	sayHelloInSpanish = function() {
      		return "Hola";
      	};
      };
      

      這個方式看上去有點怪異,之后可以做更進一步的解釋。在這之前,可以透露一點小道消息。 Typescript定義模塊的語法就感覺自然多了:

      module namespace {
        exports function sayHelloInEnglish = function() {
      		return "Hello";
      	};
      

      而用tsc轉譯以后,他就會變成上面的node.js語法。
      什么是Typescript? OK,以后有時間再深入吧? (聽起來怎么這么耳熟?)

      導入/使用模塊

      我們準備在main.js中導入和使用greetings.js中的所有函數。

      i> 關鍵詞require

      require是nodejs用來導入模塊的關鍵詞。想象一下require的定義如下 (怎么又是想象?)

      var require =function(path){
      	//....
      	return module.exports;
      };
      

      ii> 導入greetings.js

      //main.js
      var greetings = require("./greetings");
      

      想象一下以上代碼等價于你的代碼做了以下事情:

      //main.js
      var greetings = {
      	sayHelloInEnglish = function() {
      		return "Hello";
      	};
      	
      	sayHelloInSpanish = function() {
      		return "Hola";
      	};
      };
      

      iii> 現在我么就可以重用greetings.js的功能了

      //"Hello"
      greetings.sayHelloInEnglish();
      
      // "Hola"
      greetings.sayHelloInSpanish();
      

      警告:
      正因為nodejs的這種模塊機制,如果不小心給module.exports重新賦給了一個全新的對象,會導致不可預期的問題。
      如:

      //greetings.js
      //var exports=module.exports = {};
      exports.sayHelloInEnglish = ...
      exports.sayHelloInSpanish = ...
      /*  
        重新賦值module.exports
      */
      module.exports= "Bonjour";
      

      這時候,在main.js中我們在調用`greetings.sayHelloInEnglish()'就會出錯。

      下一步:進階研究require()的工作原理。

      posted @ 2015-06-12 04:28  予沁安  閱讀(1079)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 四虎国产精品永久在线看| 达日县| 一区二区三区在线 | 欧洲| 日韩av毛片福利国产福利| 8av国产精品爽爽ⅴa在线观看| 大地资源免费视频观看| 日韩精品一区二区亚洲专区| 国产一区二区四区不卡| 精品九九热在线免费视频| 黄色免费在线网址| 中文无码乱人伦中文视频在线| 国产精品自产在线观看一| 精品国产亚洲一区二区三区| 无码av最新无码av专区| 欧美乱码伦视频免费| av高清无码 在线播放| 26uuu另类亚洲欧美日本| 亚洲国产精品久久久天堂麻豆宅男 | japanese边做边乳喷| 久久精品久久精品久久精品| 久久久久综合中文字幕| 婷婷丁香五月六月综合激情啪| 国产无遮挡免费真人视频在线观看| 精品国产中文字幕懂色| 资中县| 猫咪AV成人永久网站在线观看| 色噜噜噜亚洲男人的天堂| 另类 专区 欧美 制服| 亚欧洲乱码视频在线专区| 日韩成人高精品一区二区| 亚洲永久一区二区三区在线| 亚洲精品成人久久av| 国产激情一区二区三区成人| 在线精品自拍亚洲第一区| 激情文学一区二区国产区| 国产精品大片中文字幕| 国产精品中文字幕在线| 国产精品九九九一区二区| 毛片tv网站无套内射tv网站| 九九热免费公开视频在线| 日韩人妻无码精品久久|