亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 16:24:43
字體:
來源:轉載
供稿:網友

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

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

一 .>關于閉包

理解閉包 需要的知識

1.變量的作用域

例1:

 

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

readA(); //執行此函數

例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: 函數內部聲明變量c時,一定要加上 var,否則 c會成為一個全局變量

所以函數內可見全局變量,函數內的局部變量卻對外不可見

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

當我們要獲取函數內的內部變量

于是有了例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.慎用閉包,注意內存占用,因為它會保存父函數的狀態

2.不要隨便改變父函數內部變量的值

理解閉包

note: this 指包含它的函數被執行時所屬的對象

例1:

 

 
  1. var name = "The Window"
  2.  
  3. var object = { 
  4. name : "My Object"
  5.  
  6.   getNameFunc : function(){ //此時this (這個執行函數)是屬于object對象的,是object對象下的一個屬性的值 
  7.    return function(){ //此時this (這個執行函數)是一個匿名函數,從根對象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 

二 .>匿名函數

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

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

 

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

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

 

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

3.void操作符 用void操作符去執行一個沒有用圓括號包圍的一個單獨操作數

 

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

三 .>關于prototype

原型 prototype

理解js中的protitype首先需要明白js的面向對象設計

 

 
  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. //這里有一個非常有趣的現象,結合前面的來看的話, 
  9. //首先function people里的this指向的默認是Window對象 
  10. //當 調用 People();時 this 輸出為 Window對象 
  11. //但一旦調用new People('xx')時, this 輸出為 {name:'xx'} 
  12. //其實也很好理解,一旦new ,便新建了一個對象 

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

類的對象的靜態方法

 

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

原型方法

 

  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'); 

原型方法只能由該類的對象 調用

A.prototype = new B();

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

如果出現了父類和子類出現了重名的屬性,采取就近原則,如果找不到一級一級向上找,如果要指定調用上級的屬性,使用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); 

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

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

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91免费看视频.| 国产精品视频成人| 欧美日韩美女视频| 欧美精品久久久久久久久| 综合网日日天干夜夜久久| 精品国产一区二区在线| 亚洲第一天堂av| 色午夜这里只有精品| 欧美日韩国产一区二区| 尤物九九久久国产精品的特点| 国产精品久久久91| 欧美日韩亚洲一区二区| 亚洲国产99精品国自产| 中文字幕亚洲激情| 国产成人精品免高潮在线观看| 精品久久久久久久久久久久| 亚洲女人天堂成人av在线| 日韩精品极品在线观看播放免费视频| 亚洲第一精品福利| 欧美国产精品va在线观看| 国产精品视频男人的天堂| 最近中文字幕mv在线一区二区三区四区| 日韩中文娱乐网| 日韩精品在线影院| 最近的2019中文字幕免费一页| 亚洲欧洲av一区二区| 一本色道久久88精品综合| 国产mv久久久| 这里只有精品久久| 欧美成人在线免费| 欧美日韩中文字幕在线| 亚洲韩国欧洲国产日产av| 亚洲欧美成人在线| 大伊人狠狠躁夜夜躁av一区| 精品国产视频在线| 久久精品国产欧美亚洲人人爽| 国产精品丝袜高跟| 国产精品扒开腿做| 美乳少妇欧美精品| 国产精品久久久久久亚洲影视| 欧美在线一级va免费观看| 亚洲激情国产精品| 国产亚洲精品一区二555| 亚洲成人av在线播放| 欧美日韩国产精品| 欧美国产日韩一区| 亚洲系列中文字幕| 91成品人片a无限观看| 色老头一区二区三区在线观看| 在线日韩日本国产亚洲| 午夜精品久久久久久久男人的天堂| 中国china体内裑精亚洲片| 亚洲人成亚洲人成在线观看| 亚洲人精选亚洲人成在线| 97超碰国产精品女人人人爽| 最新69国产成人精品视频免费| 欧美精品电影免费在线观看| 国产精品最新在线观看| 九九热这里只有精品6| 欧美亚洲视频在线观看| 色偷偷偷亚洲综合网另类| 国精产品一区一区三区有限在线| 中文字幕九色91在线| 国产亚洲精品久久久久动| 欧美亚洲国产另类| 午夜精品一区二区三区在线播放| 日本一区二区在线播放| 精品成人国产在线观看男人呻吟| 亚洲一区二区三区成人在线视频精品| 日韩欧美亚洲范冰冰与中字| 在线一区二区日韩| 欧美在线视频免费| 日韩欧美亚洲国产一区| 神马久久桃色视频| 国产精品扒开腿做爽爽爽男男| 91精品国产乱码久久久久久蜜臀| 欧美日韩国产在线播放| 欧美日本在线视频中文字字幕| 精品国产一区二区三区久久久| 国产精品爱啪在线线免费观看| 91在线免费看网站| 日韩高清有码在线| 成人免费高清完整版在线观看| 在线色欧美三级视频| 欧美激情中文字幕在线| 国产欧美一区二区三区在线| 日韩最新中文字幕电影免费看| 在线精品国产成人综合| 日韩精品亚洲精品| 欧美老女人在线视频| 欧美成人激情在线| 91免费精品国偷自产在线| 91精品久久久久久久久久入口| 亚洲人成伊人成综合网久久久| 日韩中文字幕欧美| 久久人91精品久久久久久不卡| 欧美一区二区视频97| 日韩欧美在线视频观看| 成人在线国产精品| 亚洲一区免费网站| 国产亚洲欧美视频| 久久久999精品| 国产精品视频xxx| 欧美亚洲激情视频| 欧美一区第一页| 国产999精品久久久影片官网| 精品呦交小u女在线| 大量国产精品视频| 8x海外华人永久免费日韩内陆视频| 国产精品爽黄69天堂a| 成人午夜在线影院| 国产伊人精品在线| 精品欧美激情精品一区| 91精品久久久久久久久不口人| 久久精品国亚洲| 亚洲欧美精品一区| 亚洲精品之草原avav久久| 亚洲综合成人婷婷小说| 久久久国产精品x99av| 久久久免费在线观看| 国产成人亚洲综合91| 大胆人体色综合| 亚洲一区制服诱惑| 亚洲欧美制服中文字幕| 91国产在线精品| 欧美精品性视频| 久久天天躁狠狠躁夜夜躁| 亚洲欧洲av一区二区| 一区二区三区www| 亚洲人成伊人成综合网久久久| 国产有码在线一区二区视频| 国产99在线|中文| 亚洲伦理中文字幕| 国产综合在线观看视频| 欧美午夜片在线免费观看| 一本色道久久综合狠狠躁篇怎么玩| 国产精品视频午夜| 日韩va亚洲va欧洲va国产| 亚洲女在线观看| 欧美日韩另类在线| 亚洲第一国产精品| 久久不射热爱视频精品| 18一19gay欧美视频网站| 欧美大秀在线观看| 精品久久久久久久久国产字幕| 国内精品免费午夜毛片| 7m第一福利500精品视频| 欧美一区二区三区四区在线| 中文字幕亚洲精品| 日韩男女性生活视频| 88国产精品欧美一区二区三区| 久久成人这里只有精品| 亚洲第一二三四五区| 国产精品1区2区在线观看| 国产精品高潮在线| 亚洲丁香久久久| 亚洲欧洲日产国码av系列天堂| 性欧美激情精品| 国产一区二区三区在线播放免费观看| 98精品国产自产在线观看| 黑人巨大精品欧美一区二区一视频| 日韩成人中文电影| 亚洲欧美日韩国产中文专区| 欧美综合第一页|