日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
實(shí)現(xiàn)JavaScript編寫類的方式

網(wǎng)上實(shí)現(xiàn)javascript寫類的方法有很多, 總結(jié)下不外乎以下幾種. 我自己學(xué)習(xí)總結(jié)了一下.

我們提供的服務(wù)有:成都做網(wǎng)站、網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、鄞州ssl等。為上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的鄞州網(wǎng)站制作公司

構(gòu)造方法方式;原型方式;構(gòu)造方法+原型的混合方式

現(xiàn)在具體分析一下以上方式的優(yōu)缺點(diǎn):

構(gòu)造方法方式

這是最基本的也是最像Java寫class的方式. 上代碼:

   
 
 
  1. //創(chuàng)建一個(gè)Student類  
  2.  function Student(name){  
  3.       this.name = name;  
  4.       this.sayName = function(){  
  5.           alert(this.name);  
  6.       };  
  7.  }  
  8.  //new兩個(gè)不同的Student.  
  9.  var jimmy = new Student('jimmy');  
  10.  var henry = new Student('henry');  
  11.  jimmy.sayName();//顯示jimmy  
  12.  henry.sayName();//顯示henry 

這樣的方法簡(jiǎn)單明了, 也符合JAVAer的胃口, 但是每new一個(gè)新對(duì)象, 就會(huì)在內(nèi)存中分配一個(gè)sayName方法, 性能不是很好.

原型方式

   
 
 
  1. //創(chuàng)建一個(gè)Student類  
  2.  //屬性和方法都通過Student.prototype設(shè)置  
  3.  function Student(name){  
  4.      Student.prototype = name;  
  5.      Student.prototype.sayName = function(){  
  6.          alert(this.name);  
  7.      }  
  8.  }  
  9.  //new兩個(gè)不同的Student.  
  10.  var jimmy = new Student('jimmy');  
  11.  var henry = new Student('henry');  
  12.  jimmy.sayName();//顯示henry!!!  
  13.  henry.sayName();//顯示henry!!! 

也許執(zhí)行的代碼和有些童鞋的期望有出入. 兩次alert都彈出henry! 其實(shí)很好理解. 屬性和方法都通過prototype設(shè)置. 不同對(duì)象的同一個(gè)屬性或者方法都指向同一個(gè)內(nèi)存, 所以henry是在jimmy后設(shè)置的. 所以henry把jimmy覆蓋了.

混合方式

構(gòu)造方法的方式可以為同一個(gè)類的每一個(gè)對(duì)象分配不同的內(nèi)存, 這很適合寫類的時(shí)候設(shè)置屬性, 但是設(shè)置方法的時(shí)候我們就需要讓同一個(gè)類的不同對(duì)象共享同一個(gè)內(nèi)存了. 寫方法用原型的方式***. 所以寫類的時(shí)候需要把構(gòu)造方法和原型兩種方式混合著用. 廢話少說, 看代碼:

   
 
 
  1. //創(chuàng)建一個(gè)Student類  
  2.  //屬性通過構(gòu)造方法設(shè)置  
  3.  //方法通過Student.prototype設(shè)置  
  4.  function Student(name){  
  5.      this.name = name;  
  6.      Student.prototype.sayName = function(){  
  7.          alert(this.name);  
  8.      }  
  9.  }  
  10.  //new兩個(gè)不同的Student.  
  11.  var jimmy = new Student('jimmy');  
  12.  var henry = new Student('henry');  
  13.  jimmy.sayName();//顯示jimmy  
  14.  henry.sayName();//顯示henry 

so far so good. 同一類的不同對(duì)象, 屬性各自占有內(nèi)存, 方法共享同一內(nèi)存. 其實(shí)這里還是有一個(gè)小問題:

每new一個(gè)新對(duì)象, 就會(huì)執(zhí)行一次

   
 
 
  1. Student.prototype.sayName = function(){  
  2.      alert(this.name);  

造成不必要的重復(fù)運(yùn)算. 可以在類里面設(shè)置一個(gè)標(biāo)記位, ***次執(zhí)行的時(shí)候給這個(gè)標(biāo)志位設(shè)置true, 如果為true就不再為prototype設(shè)置方法.

責(zé)任編輯:張偉
來源: jimmy_jia的博客 JavaScript


分享題目:實(shí)現(xiàn)JavaScript編寫類的方式
文章網(wǎng)址:http://m.5511xx.com/article/dpgijdg.html