最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript的無new構(gòu)建實例詳解

 更新時間:2016年05月15日 10:46:49   作者:hi丶小時候  
這篇文章主要介紹了Javascript的無new構(gòu)建實例詳解的相關(guān)資料,小編感覺介紹的非常詳細(xì),具有參考借鑒價值,感興趣的朋友一起學(xué)習(xí)吧

看jquery源代碼第一步的時候,對于jquery對象的創(chuàng)建就看的云里霧里,琢磨半天終于有點感覺了,在此記錄下

第一種方式:

var A = function(){
return A.prototype.init();
}
A.prototype = {
init:function(){
this.age = 50;
console.log(this);
return this;
},
age:100
}
console.log(A() === new A());

1.分析下結(jié)果為什么為true

A()內(nèi)部調(diào)用的是A.prototype.init()函數(shù)

new A() 內(nèi)部會調(diào)用構(gòu)造函數(shù),而它的構(gòu)造函數(shù)就是function(){return A.prototype.init();},同樣調(diào)用的是A.prototype.init()函數(shù)

2.分析下A.prototype.init()函數(shù)返回什么

那就要看this了,判斷this指向誰,我們要在函數(shù)調(diào)用的時候分析,由于它是作為原型對象的屬性調(diào)用的,所以this就是原型對象A.prototype

這種創(chuàng)建方式,無論你調(diào)用多少次A(),他們其實都是返回的同一個對象,所以對b對象的修改會影響a對象,見下圖

var a = A();
var b = A();
console.log(a.age);
console.log(b.age);
b.age = 22;
console.log(a.age);
console.log(b.age);

那么如何解決這種問題呢,接下來就講下第二種方式,它也是jquery采用的方式

第二種方式

var A = function(){
return new A.prototype.init();//①
}
A.prototype = {
init:function(){
this.age = 50;
console.log(this);
return this;
},
age:100
}
 A.prototype.init.prototype = A.prototype;//②
var a = new A();
var b = new A();
console.log(a===b);
console.log(a.age);
console.log(b.age);
b.age = 22;
console.log(a.age);
console.log(b.age);

分析下①和②

①中new A.prototype.init()主要做了三件事

創(chuàng)建一個空對象var obj = {};

obj對象屬性_proto_指向函數(shù)A.prototype.init的prototype;

將A.prototype.init函數(shù)的this替換成obj對象,在調(diào)用A.prototype.init函數(shù),A.prototype.init.call(obj),并返回新對象

因為①返回的對象的原型是A.prototype.init.prototype,它和A.prototype并沒什么關(guān)系,為了使新返回的對象可以繼承自A.prototype,所以②讓A.prototype.init.prototype指向A.prototype

所以方式二即創(chuàng)建了實例,又保證了各自的作用域獨立。

以上所述是小編給大家介紹的Javascript的無new構(gòu)建實例詳解,希望對大家以上幫助,如果大家想了解更多資訊,敬請關(guān)注腳本之家網(wǎng)站!

相關(guān)文章

  • TypeScript合并兩個排序鏈表的方法詳解

    TypeScript合并兩個排序鏈表的方法詳解

    給定兩個遞增排序的鏈表,如何將這兩個鏈表合并?合并后的鏈表依然按照遞增排序。本文就跟大家如何利用TypeScript實現(xiàn)這一效果,感興趣的可以學(xué)習(xí)一下
    2022-06-06
  • 使用js畫圖之餅圖

    使用js畫圖之餅圖

    這篇文章主要介紹了使用js繪制幾何圖形系列教程的繪制餅圖篇,需要的朋友可以參考下
    2015-01-01
  • JavaScript制作樓層導(dǎo)航效果流程詳解

    JavaScript制作樓層導(dǎo)航效果流程詳解

    項目中遇到比較多的的文檔內(nèi)容,為了方便查找里面的小內(nèi)容,一般都會在左側(cè)或者右側(cè)放一個固定樓層的導(dǎo)航欄,今天就來說一下這個固定樓層導(dǎo)航欄的思路以及實現(xiàn)的方法
    2021-10-10
  • 通過JavaScript控制字體大小的代碼

    通過JavaScript控制字體大小的代碼

    這個腳本會改變一個段落內(nèi)的任何文字的字體大?。?lt;P>標(biāo)簽)。如果你想改變其他標(biāo)簽內(nèi)的文本編輯的getElementsByTagName("P");的一部分。
    2011-10-10
  • JS request函數(shù) 用來獲取url參數(shù)

    JS request函數(shù) 用來獲取url參數(shù)

    項目中經(jīng)常會遇到這種問題 下面代碼解決問題!
    2010-05-05
  • 詳解ES6?中的迭代器和生成器

    詳解ES6?中的迭代器和生成器

    迭代器是一個統(tǒng)一的接口,它的作用是使各種數(shù)據(jù)結(jié)構(gòu)可以被便捷的訪問,它是通過一個鍵為Symbol.iterator的方法來實現(xiàn),這篇文章主要介紹了ES6?中的迭代器和生成器,需要的朋友可以參考下
    2022-08-08
  • 微信小程序如何實現(xiàn)快速精確定位

    微信小程序如何實現(xiàn)快速精確定位

    騰訊位置服務(wù)為微信小程序提供了基礎(chǔ)的標(biāo)點能力、線和圓的繪制接口等地圖組件和位置展示、地圖選點等地圖API位置服務(wù)能力支持,下面這篇文章主要給大家介紹了關(guān)于微信小程序如何實現(xiàn)快速精確定位的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • javascript中sort()的用法實例分析

    javascript中sort()的用法實例分析

    這篇文章主要介紹了javascript中sort()的用法,實例分析了sort()的功能、定義及使用技巧,需要的朋友可以參考下
    2015-01-01
  • GoJs連線繪圖模板Link使用示例詳解

    GoJs連線繪圖模板Link使用示例詳解

    這篇文章主要為大家介紹了GoJs連線繪圖模板Link使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 拖動層

    拖動層

    [紅色]拖動層...
    2006-10-10

最新評論

徐汇区| 汉源县| 巫溪县| 德州市| 息烽县| 犍为县| 吴川市| 万安县| 湖州市| 临澧县| 高碑店市| 永济市| 石嘴山市| 定西市| 合阳县| 台东市| 澎湖县| 马龙县| 吉首市| 翁牛特旗| 澄江县| 方城县| 黄龙县| 长寿区| 万安县| 石首市| 于田县| 建宁县| 开远市| 寿宁县| 永善县| 大同市| 霍州市| 台安县| 德化县| 项城市| 仪陇县| 出国| 都昌县| 达州市| 英德市|