成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

創(chuàng)建對(duì)象及原型的使用

rickchen / 1521人閱讀

摘要:面向?qū)ο蟮娜筇匦苑庋b繼承自己沒有的,拿別人過來用,就是繼承多態(tài)父類引用指向子類的對(duì)象中用不到創(chuàng)建對(duì)象的四種方式使用字面量創(chuàng)建對(duì)象用一個(gè)創(chuàng)建一個(gè),不能復(fù)用,造成代碼冗余,資源浪費(fèi)使用內(nèi)置構(gòu)造函數(shù)創(chuàng)建對(duì)象創(chuàng)建出來的對(duì)象都是空的對(duì)象,要手動(dòng)的去

1.面向?qū)ο蟮娜筇匦?/b>

封裝

繼承
自己沒有的,拿別人過來用,就是繼承

多態(tài)
父類引用指向子類的對(duì)象(JavaScript中用不到)

2.創(chuàng)建對(duì)象的四種方式

使用字面量創(chuàng)建對(duì)象

   var o = {key:value, key:value...}

用一個(gè)創(chuàng)建一個(gè),不能復(fù)用,造成代碼冗余,資源浪費(fèi)

使用內(nèi)置構(gòu)造函數(shù)創(chuàng)建對(duì)象

   var o = new Object();
   var o = new Array();

創(chuàng)建出來的對(duì)象都是空的對(duì)象,要手動(dòng)的去為對(duì)象添加屬性。造成代碼重復(fù)

封裝簡單的工廠函數(shù)(不推薦使用)

function createObj(){
     var obj = {};
     obj.xx=xxx;
     return obj;
}

自定義構(gòu)造函數(shù)

function 構(gòu)造函數(shù)名{
    this.xxx=xxx;
    //....
}

1.構(gòu)造函數(shù)名首字母要大寫
2.構(gòu)造函數(shù)一般和new關(guān)鍵字一起使用
3.構(gòu)造函數(shù)返回值默認(rèn)為新創(chuàng)建好對(duì)象 如果手動(dòng)返回基本數(shù)據(jù)類型,不影響默認(rèn)返回值,如果返回的是對(duì)象,那么新創(chuàng)建出來的對(duì)象將不會(huì)返回,取而代之的是return后面的對(duì)象

構(gòu)造函數(shù)(constructor)的執(zhí)行步驟
1.使用new關(guān)鍵字創(chuàng)建對(duì)象
2.調(diào)用構(gòu)造函數(shù),將new創(chuàng)建出來的對(duì)象賦值給構(gòu)造函數(shù)內(nèi)的this
3.使用this給新創(chuàng)建出來的對(duì)象增加成員
4.默認(rèn)返回新創(chuàng)建出來的這個(gè)對(duì)象

原型 構(gòu)造函數(shù)存在問題

構(gòu)造函數(shù)中的方法,每新創(chuàng)建一個(gè)對(duì)象的時(shí)候,該對(duì)象都會(huì)重新的創(chuàng)建一次這個(gè)方法,每個(gè)獨(dú)享獨(dú)占一個(gè)方法
但是該方法內(nèi)容完全相同,所以造成資源浪費(fèi)

1.解決辦法1
將構(gòu)造函數(shù)內(nèi)的方法,進(jìn)行提取,放在構(gòu)造函數(shù)外面,在構(gòu)造函數(shù)內(nèi)部進(jìn)行引用賦值
那么創(chuàng)建出來的對(duì)象,都會(huì)指向構(gòu)造函數(shù)外面的這個(gè)函數(shù),達(dá)到共享的目的
問題:全局變量增多,造成全局變量污染,代碼結(jié)構(gòu)混亂,不容易維護(hù)

2.解決辦法2
使用原型

3.原型 原型是什么?

在構(gòu)造函數(shù)創(chuàng)建出來的時(shí)候,系統(tǒng)會(huì)默認(rèn)的創(chuàng)建并關(guān)聯(lián)一個(gè)對(duì)象,這個(gè)對(duì)象就是原型,原型對(duì)象默認(rèn)是空對(duì)象
默認(rèn)的原型對(duì)象中會(huì)有一個(gè)屬性constructor指向該構(gòu)造函數(shù)

原型的作用

原型對(duì)象中的成員,可以被使用和它關(guān)聯(lián)的構(gòu)造函數(shù)創(chuàng)建出來的所有對(duì)象共享

原型對(duì)象的使用

使用對(duì)象的動(dòng)態(tài)特性,為原型對(duì)象添加成員

直接替換原型對(duì)象

注意事項(xiàng):

直接替換原型對(duì)象,會(huì)導(dǎo)致替換之前創(chuàng)建的對(duì)象的原型和替換之后創(chuàng)建的對(duì)象的原型不一致
原型的使用該注意事項(xiàng)

1.使用對(duì)象訪問屬性的時(shí)候,會(huì)現(xiàn)在對(duì)象中查找,如果找到了就直接使用
如果沒有找到,就去原型中查找
2.使用對(duì)象設(shè)置屬性的時(shí)候,只會(huì)在對(duì)象本身中查找,不會(huì)去原型中查找,如果在對(duì)象本身中沒有找到這個(gè)屬性
則給該對(duì)象新增一個(gè)屬性,如果在對(duì)象中有這個(gè)屬性,修改這個(gè)屬性
3.如果在原型對(duì)象中有引用類型的屬性,那么使用對(duì)象進(jìn)行修改該屬性內(nèi)容,則其他所有跟這個(gè)原型對(duì)象相關(guān)的對(duì)象都會(huì)受到影響

Person.prototype.car = {};
var p = new Person( );
p.car = {}; //這是修改屬性
p.car.brand= ""; //這是修改屬性的內(nèi)容

4.一般情況下不會(huì)將屬性添加到原型對(duì)象中
只會(huì)將需要共享的方法,添加到原型對(duì)象中

proto

1.這個(gè)屬性不是標(biāo)準(zhǔn)屬性,所以存在通用性問題
2.一般不推薦使用這個(gè)屬性
3.調(diào)試的時(shí)候,可以使用這個(gè)屬性
4.這個(gè)屬性是原型中的屬性

替換原型時(shí)候的注意事項(xiàng):
在新替換的原型中,沒有constructor屬性,會(huì)影響三角結(jié)構(gòu)關(guān)系的合理性
so,在新替換的原型中,手動(dòng)添加constructor屬性,以保證關(guān)系的合理性,賦值為關(guān)聯(lián)的構(gòu)造函數(shù)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/52160.html

相關(guān)文章

  • 創(chuàng)建對(duì)象原型使用

    摘要:面向?qū)ο蟮娜筇匦苑庋b繼承自己沒有的,拿別人過來用,就是繼承多態(tài)父類引用指向子類的對(duì)象中用不到創(chuàng)建對(duì)象的四種方式使用字面量創(chuàng)建對(duì)象用一個(gè)創(chuàng)建一個(gè),不能復(fù)用,造成代碼冗余,資源浪費(fèi)使用內(nèi)置構(gòu)造函數(shù)創(chuàng)建對(duì)象創(chuàng)建出來的對(duì)象都是空的對(duì)象,要手動(dòng)的去 1.面向?qū)ο蟮娜筇匦? 封裝 繼承自己沒有的,拿別人過來用,就是繼承 多態(tài)父類引用指向子類的對(duì)象(JavaScript中用不到) 2.創(chuàng)建對(duì)象...

    tuniutech 評(píng)論0 收藏0
  • 【JavaScript】【對(duì)象創(chuàng)建對(duì)象對(duì)象繼承實(shí)用方式理解

    摘要:創(chuàng)建對(duì)象對(duì)象繼承實(shí)際上是一回事我們所需要的實(shí)例對(duì)象通過構(gòu)造函數(shù)獲得私有屬性通過原型鏈獲得共享的屬性。原型式繼承和寄生式繼承用于創(chuàng)建與已有對(duì)象類似的實(shí)例對(duì)象。 本文約定:不特殊聲明的情況下,屬性代指屬性或方法。 創(chuàng)建對(duì)象、對(duì)象繼承實(shí)際上是一回事:我們所需要的實(shí)例對(duì)象通過構(gòu)造函數(shù)獲得私有屬性、通過原型鏈獲得共享的屬性。什么是好的方式?私有屬性通過構(gòu)造函數(shù)的方式獲得(不考慮實(shí)例中自定義私有屬...

    scola666 評(píng)論0 收藏0
  • js構(gòu)造函數(shù)(繼承方法利弊)

    摘要:繼承方式父類構(gòu)造函數(shù)實(shí)例方法子類調(diào)用實(shí)現(xiàn)父類的構(gòu)造函數(shù)吹呀吹呀,我的驕傲放縱 js構(gòu)造函數(shù) *前言:上篇文章介紹了js中通過構(gòu)造函數(shù)來實(shí)例化對(duì)象的各種方法js構(gòu)造函數(shù),這篇文章主要介紹構(gòu)造函數(shù)的繼承(類的繼承),同樣包括 ES5 和 ES6 兩部分的介紹,能力所限,文中難免有不合理或錯(cuò)誤的地方,還望各位大神批評(píng)指正~ 原型 首先簡單介紹一下實(shí)例屬性/方法 和 原型屬性/方法,以便更好理...

    booster 評(píng)論0 收藏0
  • javaScript原型原型鏈詳解(一)

    摘要:執(zhí)行行代碼,我們可以看到控制臺(tái)打印出來的結(jié)果如下結(jié)果印證了我們上面講的內(nèi)容指向的構(gòu)造函數(shù)指向的原型對(duì)象原型對(duì)象中指向構(gòu)造函數(shù)。 在javascript中原型和原型鏈機(jī)制是最難懂的部分(沒有之一),同時(shí)也是最重要的部分,在學(xué)習(xí)的過程中你可能認(rèn)認(rèn)真真的看了一遍但還是完全不懂書上說的什么,的確是這樣的,我在學(xué)習(xí)的時(shí)候可是反復(fù)看了4、5遍才初步理解了。 下面我把我的理解總結(jié)了一下希望對(duì)你們有...

    springDevBird 評(píng)論0 收藏0
  • 復(fù)習(xí)Javascript專題(三):面向對(duì)象對(duì)象創(chuàng)建與繼承,原型原型鏈)

    摘要:在創(chuàng)建子類實(shí)例時(shí),不能向超類型的構(gòu)造函數(shù)中傳遞參數(shù)。構(gòu)造函數(shù)繼承子類傳進(jìn)的值是基本思想是在子類構(gòu)造函數(shù)的內(nèi)部調(diào)用超類或父類型構(gòu)造函數(shù)。繼承保證構(gòu)造函數(shù)指針指向如果想同時(shí)繼承多個(gè),還可使用添加屬性的方式類繼承, OOP:Object Oriented Programming 面向?qū)ο缶幊獭?題外話:面向?qū)ο蟮姆秶鷮?shí)在太大,先把這些大的東西理解理解。 1.什么是對(duì)象? 根據(jù)高程和權(quán)威指南上...

    testHs 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

rickchen

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<