国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

jquery學習筆記之無new構建詳解

2024-05-06 15:23:47
字體:
來源:轉載
供稿:網友

前言

當我們想要創建一個對象,我們可能使用new方法去構建一個對象,那按道理jquery也是一個對象,應該也是用new jquery()來構建呀為什么我們創建jquery對象不用new jquery()而是直接使用類似$(ele)的方式去構建出來一個jquery對象呢?其實內部還是使用了new來構建的,只是jquery內部幫我們構建了而已,請看下面代碼

function Jquery(selector, context) {  return new Jquery(selector, context); } Jquery.prototype = {  version:'1.01' }

直接這樣內部使用new來構建Jquery,很明顯是有問題的,這樣的話就形成了死循環。為了解決死循環的問題,請看下面代碼:

function Jquery(selector, context) { return Jquery.prototype.init(selector, context);}Jquery.prototype = { version:'1.01', init: function () {  this.name = "lin";  return this; }}var a = Jquery();var b = Jquery();console.log(a.version); //1.01console.log(a.name); //lina.name = "na";console.log(b.name); //na

死循環的問題確實解決了,但是又發現了新的問題,可以看到a和b兩個對象的屬性是公用的,我修改a.name屬性為na,b.name屬性也跟著變為了na,其原因就是this都是指向Jquery的

為了解決這個問題,我們可以每次調用Jquery()的時候都構建一個新的對象,改進代碼如下:

function Jquery(selector, context) { return new Jquery.prototype.init(selector, context); //注意看,這里多了個new}Jquery.prototype = { version:'1.01', init: function () {  this.name = "lin";  console.log(this);  return this; }}var a = Jquery();var b = Jquery();console.log(a.version); //undefinedconsole.log(a.name); //lina.name = "na";console.log(b.name); //na

這樣處理之后,屬性共享的問題已經解決了,每個對象都有各自的屬性,可以自由修改,每個對象互不影響,但是又又又發現了新的問題,可以看到我們控制臺打印a.version這個屬性的時候是讀取不到這個屬性的,原因就在于此時Jquery.prototypeJquery.prototype.init.prototype是互不相干的,我們創建的是Jquery.prototype.init對象,所以只能讀到Jquery.prototype.init.prototype上的屬性而讀取不到Jquery.prototype上的屬性的(該例指version這個屬性),解決辦法很簡單,就是把Jquery.prototype賦值給Jquery.prototype.init.prototype,這樣就相當于把Jquery原型上的屬性全部賦值到了Jquery.init的原型上,請看下面代碼:

function Jquery(selector, context) { return new Jquery.prototype.init(selector, context);}Jquery.prototype = { version:'1.01', init: function () {  this.name = "lin";  return this; }}Jquery.prototype.init.prototype = Jquery.prototype; //畫龍點睛之筆var a = Jquery();var b = Jquery();console.log(a.version); //1.01console.log(a.name); //lina.name = "na";console.log(b.name); //na            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 内乡县| 长海县| 开原市| 饶平县| 方城县| 布拖县| 沙坪坝区| 禹城市| 安图县| 舞阳县| 屏东市| 开鲁县| 简阳市| 田东县| 上蔡县| 长治县| 柳河县| 株洲县| 锡林浩特市| 北碚区| 常德市| 乃东县| 项城市| 洪湖市| 玛纳斯县| 南雄市| 潮州市| 定边县| 霸州市| 逊克县| 祁阳县| 平乡县| 阳信县| 凯里市| 常德市| 宁海县| 陆良县| 乐安县| 商水县| 光泽县| 定远县|