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

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

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

看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)這一效果,感興趣的可以學習一下
    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>標簽)。如果你想改變其他標簽內(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ǔ)的標點能力、線和圓的繪制接口等地圖組件和位置展示、地圖選點等地圖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使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • 拖動層

    拖動層

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

最新評論

大安市| 尉犁县| 邯郸市| 松原市| 兴业县| 巩义市| 玉山县| 宿松县| 玉环县| 汕尾市| 防城港市| 西昌市| 康乐县| 汤原县| 林芝县| 牟定县| 东明县| 建宁县| 上栗县| 鹤岗市| 个旧市| 裕民县| 屯留县| 新建县| 临夏县| 大冶市| 秦安县| 喀喇沁旗| 辽源市| 河津市| 福鼎市| 泽州县| 南宫市| 河曲县| 黄陵县| 张家口市| 鄂伦春自治旗| 会泽县| 巴青县| 大关县| 湟源县|