中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript函數閉包實例講解

發布時間:2021-09-01 20:17:32 來源:億速云 閱讀:118 作者:chen 欄目:web開發

這篇文章主要講解了“JavaScript函數閉包實例講解”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“JavaScript函數閉包實例講解”吧!

首先讓我們來了解一下prototype方法:

1、不使用prototype屬性定義的對象方法,是靜態方法,只能直接用類名進行調用!另外,此靜態方法中無法使用this變量來調用對象其他的屬性!
2、使用prototype屬性定義的對象方法,是非靜態方法,只有在實例化后才能使用!其方法內部可以this來引用對象自身中的其他屬性!
Tips :所有的變量,如果不加上var關鍵字,則默認的會添加到全局對象的屬性上去!

具體來說模擬類有以下5種常見寫法:

第一種寫法:具體介紹見以下代碼注釋。

function Circle(r) {
    this.r = r;
  }

  Circle.PI = 3.14159;/*Circle.PI屬于全局變量 */
  Circle.prototype.area = function() {
    return Circle.PI * this.r * this.r;
  }/*Circle方法調用prototype屬性從而能用this調用 Circle方法中的r屬性*/

  var c = new Circle(1.0);/* 實例化 Circle*/
  alert(c.area());

第二種寫法:與Java類相似,推薦使用!

var Circle = function() { 
    var obj = new Object(); /*先實例化Object方法,使之能調用 obj.PI屬性及obj.area方法*/
    obj.PI = 3.14159; 
     
    obj.area= function( r ) { 
      return this.PI * r * r; 
    } 
    return obj; 
  } 
   
  var c = new Circle(); 
  alert( c.area( 1.0 ) );

第三種寫法:主要思想是自己先實例化出一個對象,在往這個對象里添加屬性及方法

var Circle = new Object(); 
Circle.PI = 3.14159; 
Circle.Area = function( r ) { 
    return this.PI * r * r; 
} 
 
alert( Circle.Area( 1.0 ) );

 第四種寫法:該寫法跳過new這一步驟,且電腦簡單清晰明了,個人推薦這種寫法!!

var Circle={ 
      "PI":3.14159, 
     "area":function(r){ 
         return this.PI * r * r; 
        } 
    }; 
    alert( Circle.area(1.0) );

 第五種寫法:此方法與前三種大同小異,不過聽說這種寫法很少人用,不建議推薦使用哦!!

var Circle = new Function("this.PI = 3.14159;this.area = function( r ) {return r*r*this.PI;}"); 
 
alert( (new Circle()).area(1.0) );

想必各位朋友都在想既然是模擬面向對象,那是不是得有封裝繼承,getset方法???答案是肯定的,那讓我們來看看如下代碼:

 封裝:在看看如下代碼我們能清晰的了解到封裝的使用,假若我們去掉 var name = "default"; 中的var,那么結果又是怎么樣??答案是與先前一樣的,由此可見無var定義的屬性只是再其變量作用域中充當全局,只有屬性在其作用域中是私有的,若要定義一個私有方法需要將其賦予一個變量充當屬性。還有本例中new 可加可不加,若不加可往其后添加()。

var person = function(){  
  //變量作用域為函數內部,外部無法訪問  
  var name = "default";    
    
  return {  
    getName : function(){  
      return name;  
    },  
    setName : function(newName){  
      name = newName;  
    }  
  }  
}();  
   

alert(person.name);//直接訪問,結果為undefined 
alert(person.getName());  
person.setName("abruzzi");  
alert(person.getName());

實現類和繼承:該例的主要思想是定義一個變量,將一個方法賦予它,在根據prototype方法將需要繼承的類放入其中即可達到繼承的效果。。

function Person(){  
  var name = "default";    
    
  return {  
    getName : function(){  
      return name;  
    },  
    setName : function(newName){  
      name = newName;  
    }  
  }  
  }; /* 封裝好的一個類Person */ var Jack = function(){};
  //繼承自Person
  Jack.prototype = new Person();
  //添加私有方法
  Jack.prototype.Say = function(){
    alert("Hello,my name is Jack");
  };
  var j = new Jack();
  j.setName("Jack");
  j.Say();
  alert(j.getName());

感謝各位的閱讀,以上就是“JavaScript函數閉包實例講解”的內容了,經過本文的學習后,相信大家對JavaScript函數閉包實例講解這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳新县| 鄂伦春自治旗| 余江县| 额尔古纳市| 沭阳县| 乐清市| 梁山县| 唐河县| 新源县| 安溪县| 桃园县| 宜良县| 上饶市| 大同市| 新兴县| 崇礼县| 德江县| 乌海市| 湘阴县| 卢龙县| 新沂市| 安阳市| 油尖旺区| 五大连池市| 册亨县| 温宿县| 保德县| 客服| 江都市| 阿尔山市| 安平县| 广灵县| 科技| 南充市| 诏安县| 扎赉特旗| 巧家县| 文登市| 金秀| 鸡西市| 甘德县|