麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 語言 > JavaScript > 正文

學習javascript的閉包,原型,和匿名函數(shù)之旅

2024-05-06 16:24:43
字體:
供稿:網(wǎng)友

Javascript中有幾個非常重要的語言特性——對象、原型繼承、閉包。其中閉包 對于那些使用傳統(tǒng)靜態(tài)語言C/C++的程序員來說是一個新的語言特性,本文給大家介紹js的閉包,原型,和匿名函數(shù)之旅,感興趣的朋友一起學習吧

本文通過示例給大家介紹javascript的閉包,原型,和匿名函數(shù),具體詳情請看下文。

一 .>關(guān)于閉包

理解閉包 需要的知識

1.變量的作用域

例1:

 

 
  1. var n =99; //建立函數(shù)外的全局變量 
  2. function readA(){ 
  3. alert(n); //讀取全局變量 

readA(); //執(zhí)行此函數(shù)

例2:

 

 
  1. function readB(){ 
  2. var c = 9; 
  3. function readC(){ 
  4. console.log(c); //ok c可見 
  5. return readC; 
  6. alert(c); //error c is not defined. 

note: 函數(shù)內(nèi)部聲明變量c時,一定要加上 var,否則 c會成為一個全局變量

所以函數(shù)內(nèi)可見全局變量,函數(shù)內(nèi)的局部變量卻對外不可見

js的作用域是鏈式的,父對象里的變量總對子對象可見,子對象的對象卻對父對象不可見

當我們要獲取函數(shù)內(nèi)的內(nèi)部變量

于是有了例3:

 

 
  1. function readB(){ 
  2. var c = 9; 
  3. function readC(){ 
  4. console.log(c); 
  5. return readC(); 
  6. readB(); 

閉包很類似基于此做了一個變式

 

 
  1. function readB(){ 
  2. var c = 9; 
  3. function readC(){ 
  4. console.log(c); 
  5. return readC; 
  6. var res = readB(); 
  7. res(); 

note:

1.慎用閉包,注意內(nèi)存占用,因為它會保存父函數(shù)的狀態(tài)

2.不要隨便改變父函數(shù)內(nèi)部變量的值

理解閉包

note: this 指包含它的函數(shù)被執(zhí)行時所屬的對象

例1:

 

 
  1. var name = "The Window"
  2.  
  3. var object = { 
  4. name : "My Object"
  5.  
  6.   getNameFunc : function(){ //此時this (這個執(zhí)行函數(shù))是屬于object對象的,是object對象下的一個屬性的值 
  7.    return function(){ //此時this (這個執(zhí)行函數(shù))是一個匿名函數(shù),從根對象window生成,是屬于window 
  8.      return this.name; 
  9.     }; 
  10.   } 
  11. }; 
  12. console.log(object.getNameFunc()()); //the window 

例2:

 

 
  1. var name = "The Window"
  2.  
  3. var object = { 
  4. name : "My Object"
  5.  
  6. getNameFunc : function(){ 
  7. var that = this
  8.   return function(){ 
  9.    return that.name; 
  10.   }; 
  11.  
  12. }; 
  13. console.log(object.getNameFunc()()); //My Object 

二 .>匿名函數(shù)

直接定義一個匿名函數(shù) 然后調(diào)用這個匿名函數(shù),這種形式在jquery插件的定義時很常見

1.通過函數(shù)字母量的方式. 先聲明一個匿名函數(shù),然后執(zhí)行它

 

 
  1. function(){ 
  2. console.log('excute self'); 
  3. }) (); 

2.通過優(yōu)先表達式的方式 , 由于Javascript執(zhí)行表達式是從圓括號里面到外面,所以可以用圓括號強制執(zhí)行聲明的函數(shù)

 

 
  1. function () { 
  2. alert(2); 
  3. () 
  4. ); 

3.void操作符 用void操作符去執(zhí)行一個沒有用圓括號包圍的一個單獨操作數(shù)

 

 
  1. void function(){ console.log('void') } (); 

三 .>關(guān)于prototype

原型 prototype

理解js中的protitype首先需要明白js的面向?qū)ο笤O計

 

 
  1. function People(name){ 
  2. this.name = name; 
  3.  
  4. console.log(this); //Window 或者 object { name: 'xxx' } 
  5. this.introduce = function(){ //實例對象方法 
  6. console.log(this.name); 
  7. new People('leon').introduce(); 
  8. //這里有一個非常有趣的現(xiàn)象,結(jié)合前面的來看的話, 
  9. //首先function people里的this指向的默認是Window對象 
  10. //當 調(diào)用 People();時 this 輸出為 Window對象 
  11. //但一旦調(diào)用new People('xx')時, this 輸出為 {name:'xx'} 
  12. //其實也很好理解,一旦new ,便新建了一個對象 

實例對象方法只能這樣 new People('leon').introduce(); 調(diào)用 因為它使用前必須初始化

類的對象的靜態(tài)方法

 

 
  1. var People = {}; //等于一個對象 {} 或者 function 數(shù)組都可以 此時People需要是引用類型 
  2. People.sayhi = function(to_who){ 
  3. console.log('hi '+ to_who); 
  4. People.sayhi('lee'); //調(diào)用時這樣調(diào)用 

原型方法

 

  1. var People = function(){}; // People 必須為一個 function(){} 即為一個類,不能是對象或值類型或其他引用類型 
  2. People.prototype.meet = function(meet_who) { 
  3. console.log('I am '+this.name + ',going to meet ' + meet_who); 
  4. }; 
  5. new People('lee').meet('xx'); 

原型方法只能由該類的對象 調(diào)用

A.prototype = new B();

原型看起來很像繼承,但其實不是,它更像clone更準確

如果出現(xiàn)了父類和子類出現(xiàn)了重名的屬性,采取就近原則,如果找不到一級一級向上找,如果要指定調(diào)用上級的屬性,使用call方法

 

  
  1. extendClass.prototype = new baseClass(); 
  2. var instance = new extendClass(); 
  3. var baseinstance = new baseClass(); 
  4. baseinstance.showMsg.call(instance); 
  5. obj1.func.call(obj); 

以上內(nèi)容是小編給大家分享的學習javascript的閉包,原型,和匿名函數(shù)之旅,希望對大家有用。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 亚洲精华液久久含羞草 | 视频一区免费观看 | 欧美成人小视频 | 全黄毛片 | 久久人人爽人人爽人人片av免费 | 久久久久亚洲精品国产 | 精品一区二区免费 | 午夜视| 国产羞羞视频在线免费观看 | 在线看91 | 亚洲成人免费电影 | 91久久久久 | 毛片视频播放 | 线观看免费完整aaa 一二区成人影院电影网 | 伊人在线视频 | av成人在线电影 | 国产午夜电影在线观看 | 日韩视频不卡 | 欧美日韩大片在线观看 | 嗯哈~不行好大h双性 | 久久毛片免费观看 | 国人精品视频在线观看 | 久草亚洲视频 | 国产一区二区三区在线视频 | 久久99网 | 久久福利国产 | 久久成人福利 | 污片在线观看视频 | 成人短视频在线播放 | 欧美福利视频一区二区 | 国产一级毛片高清视频 | 欧美日韩免费一区 | 免费黄色大片在线观看 | 久久久久久69 | 黄视频免费在线观看 | 黄视频免费在线观看 | 欧美成人二区 | 国产一区二区三区在线观看视频 | 国产一区二区国产 | 失禁高潮抽搐喷水h | 蜜桃视频在线免费观看 |