国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

構(gòu)造對(duì)象,原型和原型鏈筆記

lijinke666 / 2572人閱讀

摘要:首先數(shù)組會(huì)找自己的方法沒有找到,就會(huì)沿著屬性繼續(xù)到構(gòu)造函數(shù)的里找方法如果還是沒有找到,再繼續(xù)往的即找方法,最后找到方法。而這構(gòu)成的鏈就是原型鏈。

面向?qū)ο螅好嫦驅(qū)ο蟆⒃?br>對(duì)原型、原型鏈、 Function、Object 的理解
什么是 JS 原型鏈?
轉(zhuǎn)載以上文章

一、OOP(Object-oriented programming, 面向?qū)ο缶幊? 1、wiki的解釋

面向?qū)ο缶幊?OOP)是一種基于“對(duì)象”概念的編程范式。該對(duì)象包含數(shù)據(jù)(屬性),以及一些執(zhí)行過(guò)程的代碼(即方法)。對(duì)象的一個(gè)特性是,調(diào)用對(duì)象的方法過(guò)程可以訪問并經(jīng)常修改與其關(guān)聯(lián)的對(duì)象的數(shù)據(jù)字段(對(duì)象具有“this”或“self”的概念)。

2、面向?qū)ο蟮乃悸罚?/b>

把某個(gè)功能看成一個(gè)整體(對(duì)象),通過(guò)調(diào)用對(duì)象的某個(gè)方法來(lái)啟動(dòng)功能。在用的時(shí)候不去考慮這個(gè)對(duì)象內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),在去實(shí)現(xiàn)這個(gè)對(duì)象細(xì)節(jié)的時(shí)候不用管誰(shuí)在調(diào)用

3、例子
面向?qū)ο蟮膶懛?
Car.擰鑰匙()
Car.掛擋()
Car.踩油門()
二、構(gòu)造對(duì)象 1、代碼

通過(guò)new 函數(shù)名("參數(shù),參數(shù)")得到一個(gè)對(duì)象,就相當(dāng)于這個(gè)對(duì)象就是這個(gè)函數(shù)構(gòu)造出來(lái)的,這個(gè)對(duì)象是函數(shù)的實(shí)例

function Person(name) {
    this.name = name
    this.sayName = function() {
        console.log(this.name)
    }
}
var p = new Person("hunger")
2、instanceof

instanceof是一個(gè)操作符,可以判斷對(duì)象是否為某個(gè)函數(shù)的實(shí)例

p1 instanceof Person; // true
p1 instanceof Object;// true

instanceof判斷的是對(duì)象,非對(duì)象的數(shù)據(jù)不能判斷

1 instanceof Number; // false
3、構(gòu)造函數(shù)的過(guò)程

創(chuàng)建一個(gè)空對(duì)象 {},假設(shè)名字是 tmpObj,并空對(duì)象的__proto__特性指向函數(shù)的prototype屬性

執(zhí)行 Person 函數(shù),執(zhí)行過(guò)程中對(duì) this 操作就是對(duì) tmpObj 進(jìn)行操作

函數(shù)執(zhí)行完后返回剛剛創(chuàng)建的 tmpObj

把 tmpObj 賦值給 p (p也指向同一個(gè)對(duì)象)

4、構(gòu)造函數(shù)的原型鏈

1、對(duì)函數(shù)使用new表達(dá)式就是構(gòu)造函數(shù)

2、每個(gè)函數(shù)都有名稱為prototype屬性,叫做原型,是一個(gè)對(duì)象

3、每個(gè)對(duì)象都有一個(gè)內(nèi)部屬性 _proto_(規(guī)范中沒有指定這個(gè)名稱,但是瀏覽器都這么實(shí)現(xiàn)的) 指向其類型的prototype屬性,類的實(shí)例也是對(duì)象,其__proto__屬性指向“類”的prototype

4、所有實(shí)例(對(duì)象)都會(huì)通過(guò)原型鏈引用到類型(函數(shù))的prototype(原型),prototype相當(dāng)于特定類型所有實(shí)例都可以訪問到的一個(gè)公共容器,一般用來(lái)共同調(diào)用的函數(shù)


總結(jié):

我們通過(guò)函數(shù)定義了類Person,類(函數(shù))自動(dòng)獲得屬性prototype
每個(gè)類的實(shí)例都會(huì)有一個(gè)內(nèi)部屬性__proto__,指向類的prototype屬性

5、舉個(gè)栗子

默認(rèn)情況下,們寫構(gòu)造函數(shù)是不需要return的,構(gòu)造函數(shù)自動(dòng)將this代表的對(duì)象返回出來(lái)!
但如果我們寫了return語(yǔ)句,如果return是基本類型,會(huì)被認(rèn)為寫錯(cuò)了無(wú)效。obj1和2還是this代表的對(duì)象。如果return是對(duì)象,那構(gòu)造的對(duì)象就等于return后面的對(duì)象。

//obj1={a:1,b:2} obj2={a:1,b:2}

三、原型和原型鏈 1、查找數(shù)組valueof方法,講原型鏈

所有數(shù)組都是由Array這個(gè)函數(shù)構(gòu)建的。數(shù)組的所有方法都是Array.prototype或者他們的原型鏈上面的。當(dāng)我們直接賦值的方式生成一個(gè)數(shù)組的時(shí)候,就相當(dāng)于直接用new Array的方法構(gòu)建一個(gè)對(duì)象

Array函數(shù)也是由object函數(shù)構(gòu)建的Array instanceof Object===true

數(shù)組可以調(diào)用valueof這個(gè)方法,但valueof這個(gè)方法不在Array.protototype內(nèi)而是在object.prototype內(nèi)。
首先 a數(shù)組 會(huì)找自己的 valueof方法;沒有找到,就會(huì)沿著__proto__ 屬性繼續(xù)到構(gòu)造函數(shù) Array 的 prototype 里找 valueof 方法;如果還是沒有找到,再繼續(xù)往 Array.prototype 的 proto 即 Object.prototype 找 valueof 方法,最后找到 valueof 方法。

總結(jié):一個(gè)對(duì)象調(diào)用其方法,先在自己的自由屬性內(nèi)去找,找不到就去原型上去找,如果原型內(nèi)也找不到,就到原型的原型上去找,直到找到該方法。而這構(gòu)成的鏈就是原型鏈。如下圖

2、關(guān)于原型鏈的規(guī)律總結(jié)

當(dāng) new 一個(gè)函數(shù)的時(shí)候會(huì)創(chuàng)建一個(gè)對(duì)象,『函數(shù).prototype』 等于 『被創(chuàng)建對(duì)象.__proto__』

一切函數(shù)都是由 Function 這個(gè)函數(shù)創(chuàng)建的,所以『Function.prototype === 被創(chuàng)建的函數(shù).__proto__』

一切函數(shù)的原型對(duì)象都是由 Object 這個(gè)函數(shù)創(chuàng)建的,所以『Object.prototype ===
一切函數(shù).prototype.__proto__』

建議閱讀若愚老師這邊文章里面的例子,鞏固印象對(duì)原型、原型鏈、 Function、Object 的理解

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/100731.html

相關(guān)文章

  • 《javascript高級(jí)程序設(shè)計(jì)》筆記原型圖解

    摘要:不理解沒關(guān)系,下面會(huì)結(jié)合圖例分析上一篇高級(jí)程序設(shè)計(jì)筆記創(chuàng)建對(duì)象下一篇高級(jí)程序設(shè)計(jì)筆記繼承參考之原型鏈的解讀三張圖搞懂的原型對(duì)象與原型鏈繼承與原型鏈 文章直接從原型圖解開始的,如果對(duì)一些概念不太清除,可以結(jié)合后面幾節(jié)查看 1. 圖解原型鏈 1.1 鐵三角關(guān)系(重點(diǎn)) function Person() {}; var p = new Person(); showImg(https://s...

    vspiders 評(píng)論0 收藏0
  • JavaScript學(xué)習(xí)第十天筆記(繼承)

    摘要:繼承原型鏈如果構(gòu)造函數(shù)或?qū)ο蟮脑椭赶驑?gòu)造函數(shù)或?qū)ο螅脑驮僦赶驑?gòu)造函數(shù)或?qū)ο螅源祟愅疲罱K的構(gòu)造函數(shù)或?qū)ο蟮脑椭赶虻脑汀? 繼承 原型鏈 如果構(gòu)造函數(shù)或?qū)ο驛的原型指向構(gòu)造函數(shù)或?qū)ο驜,B的原型再指向構(gòu)造函數(shù)或?qū)ο驝,以此類推,最終的構(gòu)造函數(shù)或?qū)ο蟮脑椭赶騉bject的原型。由此形成了一條鏈狀結(jié)構(gòu),被稱之為原型鏈。按照上述的描述,在B中定義的屬性或方法,可以在A中使用并不需要...

    baiy 評(píng)論0 收藏0
  • [學(xué)習(xí)筆記] 小角度看JS原型

    摘要:雖然在腳本中沒有標(biāo)準(zhǔn)的方式訪問,但在每個(gè)對(duì)象上都支持一個(gè)屬性,用于訪問其構(gòu)造函數(shù)的原型對(duì)象。說(shuō)的是構(gòu)造函數(shù)和原型對(duì)象之間的關(guān)系,說(shuō)的是實(shí)例對(duì)象和原型對(duì)象之間的關(guān)系。 前言 在 segmentfault 上看到這樣一道題目: var F = function(){}; Object.prototype.a = function(){}; Function.prototype.b = fu...

    Cciradih 評(píng)論0 收藏0
  • 《javascript高級(jí)程序設(shè)計(jì)》筆記:繼承

    摘要:繼承和前面兩篇文章中的知識(shí)非常相關(guān),如果對(duì)函數(shù)創(chuàng)建原理和原型鏈不熟悉,請(qǐng)猛戳高級(jí)程序設(shè)計(jì)筆記創(chuàng)建對(duì)象高級(jí)程序設(shè)計(jì)筆記原型圖解繼承,通俗的說(shuō),就是將自身不存在的屬性或方法,通過(guò)某種方式為自己所用文章分別介紹原型鏈繼承繼承借用構(gòu)造函數(shù)繼承組合繼 繼承和前面兩篇文章中的知識(shí)非常相關(guān),如果對(duì)函數(shù)創(chuàng)建原理和原型鏈不熟悉,請(qǐng)猛戳:《javascript高級(jí)程序設(shè)計(jì)》筆記:創(chuàng)建對(duì)象《javascri...

    JerryC 評(píng)論0 收藏0
  • JS高程讀書筆記--第六章原型繼承

    摘要:高程讀書筆記第六章理解對(duì)象創(chuàng)建自定義對(duì)象的方式有創(chuàng)建一個(gè)實(shí)例,然后為它添加屬性和方法。創(chuàng)建了自定義的構(gòu)造函數(shù)之后,其原型對(duì)象默認(rèn)只會(huì)取得屬性至于其他方法都是從繼承而來(lái)的。 JS高程讀書筆記--第六章 理解對(duì)象 創(chuàng)建自定義對(duì)象的方式有創(chuàng)建一個(gè)Object實(shí)例,然后為它添加屬性和方法。還可用創(chuàng)建對(duì)象字面量的方式 屬性類型 ECMAScript在定義只有內(nèi)部采用的特性時(shí),描述了屬性的各種特征...

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

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

0條評(píng)論

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