欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Javascript的無(wú)new構(gòu)建實(shí)例詳解

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

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

第一種方式:

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)部會(huì)調(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指向誰(shuí),我們要在函數(shù)調(diào)用的時(shí)候分析,由于它是作為原型對(duì)象的屬性調(diào)用的,所以this就是原型對(duì)象A.prototype

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

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);

那么如何解決這種問(wèn)題呢,接下來(lái)就講下第二種方式,它也是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)建一個(gè)空對(duì)象var obj = {};

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

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

因?yàn)棰俜祷氐膶?duì)象的原型是A.prototype.init.prototype,它和A.prototype并沒(méi)什么關(guān)系,為了使新返回的對(duì)象可以繼承自A.prototype,所以②讓A.prototype.init.prototype指向A.prototype

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

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

相關(guān)文章

  • 微信小程序非跳轉(zhuǎn)式組件授權(quán)登錄的方法示例

    微信小程序非跳轉(zhuǎn)式組件授權(quán)登錄的方法示例

    這篇文章主要介紹了微信小程序非跳轉(zhuǎn)式組件授權(quán)登錄的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-05-05
  • 實(shí)現(xiàn)div內(nèi)部滾動(dòng)條滾動(dòng)到底部和頂部的代碼

    實(shí)現(xiàn)div內(nèi)部滾動(dòng)條滾動(dòng)到底部和頂部的代碼

    下面筆者就為大家分享一篇實(shí)現(xiàn)div內(nèi)部滾動(dòng)條滾動(dòng)到底部和頂部的代碼,代碼簡(jiǎn)潔,具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2017-11-11
  • ES7之Async/await的使用詳解

    ES7之Async/await的使用詳解

    這篇文章主要介紹了ES7之Async/await的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 跟我學(xué)習(xí)JScript的Bug與內(nèi)存管理

    跟我學(xué)習(xí)JScript的Bug與內(nèi)存管理

    跟我學(xué)習(xí)JScript的Bug與內(nèi)存管理,小編對(duì)JScript的Bug與內(nèi)存管理也不甚了解,所以整理了本篇文章,希望可以解決大家學(xué)習(xí)時(shí)的困擾。
    2015-11-11
  • 如何使用JavaScript實(shí)現(xiàn)棧與隊(duì)列

    如何使用JavaScript實(shí)現(xiàn)棧與隊(duì)列

    這篇文章主要介紹了如何使用JavaScript實(shí)現(xiàn)棧與隊(duì)列。棧和隊(duì)列是web開發(fā)中最常用的兩種數(shù)據(jù)結(jié)構(gòu)。絕大多數(shù)用戶,甚至包括web開發(fā)人員,都不知道這個(gè)驚人的事實(shí)。,需要的朋友可以參考下
    2019-06-06
  • NodeJs中的非阻塞方法介紹

    NodeJs中的非阻塞方法介紹

    NodeJs中的非阻塞方法介紹,需要的朋友可以參考下
    2012-06-06
  • 詳解JavaScript中Hash Map映射結(jié)構(gòu)的實(shí)現(xiàn)

    詳解JavaScript中Hash Map映射結(jié)構(gòu)的實(shí)現(xiàn)

    Hash Map通常在JavaScript中作為一個(gè)簡(jiǎn)單的來(lái)存儲(chǔ)鍵值對(duì)的地方,不過(guò)哈希對(duì)象Object并不是一個(gè)真正的哈希映射,沒(méi)Java中的Hash Map來(lái)的那么強(qiáng)大,well,接下來(lái)帶大家詳解JavaScript中Hash Map映射結(jié)構(gòu)的實(shí)現(xiàn)
    2016-05-05
  • 微信小程序swiper組件用法實(shí)例分析【附源碼下載】

    微信小程序swiper組件用法實(shí)例分析【附源碼下載】

    這篇文章主要介紹了微信小程序swiper組件用法,結(jié)合實(shí)例形式分析了微信小程序中swiper組件的功能、使用方法,并附帶完整源碼供讀者下載參考,需要的朋友可以參考下
    2017-12-12
  • JavaScript二叉樹及各種遍歷算法詳情

    JavaScript二叉樹及各種遍歷算法詳情

    這篇文章主要介紹了JavaScript二叉樹及各種遍歷算法詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • JS實(shí)現(xiàn)從表格中動(dòng)態(tài)刪除指定行的方法

    JS實(shí)現(xiàn)從表格中動(dòng)態(tài)刪除指定行的方法

    這篇文章主要介紹了JS實(shí)現(xiàn)從表格中動(dòng)態(tài)刪除指定行的方法,通過(guò)getElementById獲取指定行再使用deleteRow方法來(lái)實(shí)現(xiàn)刪除行的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03

最新評(píng)論