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

資訊專欄INFORMATION COLUMN

構造對象,原型和原型鏈筆記

lijinke666 / 2566人閱讀

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

面向對象:面向對象、原型
對原型、原型鏈、 Function、Object 的理解
什么是 JS 原型鏈?
轉載以上文章

一、OOP(Object-oriented programming, 面向對象編程) 1、wiki的解釋

面向對象編程(OOP)是一種基于“對象”概念的編程范式。該對象包含數據(屬性),以及一些執行過程的代碼(即方法)。對象的一個特性是,調用對象的方法過程可以訪問并經常修改與其關聯的對象的數據字段(對象具有“this”或“self”的概念)。

2、面向對象的思路:

把某個功能看成一個整體(對象),通過調用對象的某個方法來啟動功能。在用的時候不去考慮這個對象內部的實現細節,在去實現這個對象細節的時候不用管誰在調用

3、例子
面向對象的寫法

Car.擰鑰匙()
Car.掛擋()
Car.踩油門()
二、構造對象 1、代碼

通過new 函數名("參數,參數")得到一個對象,就相當于這個對象就是這個函數構造出來的,這個對象是函數的實例

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

instanceof是一個操作符,可以判斷對象是否為某個函數的實例

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

instanceof判斷的是對象,非對象的數據不能判斷

1 instanceof Number; // false
3、構造函數的過程

創建一個空對象 {},假設名字是 tmpObj,并空對象的__proto__特性指向函數的prototype屬性

執行 Person 函數,執行過程中對 this 操作就是對 tmpObj 進行操作

函數執行完后返回剛剛創建的 tmpObj

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

4、構造函數的原型鏈

1、對函數使用new表達式就是構造函數

2、每個函數都有名稱為prototype屬性,叫做原型,是一個對象

3、每個對象都有一個內部屬性 _proto_(規范中沒有指定這個名稱,但是瀏覽器都這么實現的) 指向其類型的prototype屬性,類的實例也是對象,其__proto__屬性指向“類”的prototype

4、所有實例(對象)都會通過原型鏈引用到類型(函數)的prototype(原型),prototype相當于特定類型所有實例都可以訪問到的一個公共容器,一般用來共同調用的函數


總結:

我們通過函數定義了類Person,類(函數)自動獲得屬性prototype
每個類的實例都會有一個內部屬性__proto__,指向類的prototype屬性

5、舉個栗子

默認情況下,們寫構造函數是不需要return的,構造函數自動將this代表的對象返回出來!
但如果我們寫了return語句,如果return是基本類型,會被認為寫錯了無效。obj1和2還是this代表的對象。如果return是對象,那構造的對象就等于return后面的對象。

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

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

所有數組都是由Array這個函數構建的。數組的所有方法都是Array.prototype或者他們的原型鏈上面的。當我們直接賦值的方式生成一個數組的時候,就相當于直接用new Array的方法構建一個對象

Array函數也是由object函數構建的Array instanceof Object===true

數組可以調用valueof這個方法,但valueof這個方法不在Array.protototype內而是在object.prototype內。
首先 a數組 會找自己的 valueof方法;沒有找到,就會沿著__proto__ 屬性繼續到構造函數 Array 的 prototype 里找 valueof 方法;如果還是沒有找到,再繼續往 Array.prototype 的 proto 即 Object.prototype 找 valueof 方法,最后找到 valueof 方法。

總結:一個對象調用其方法,先在自己的自由屬性內去找,找不到就去原型上去找,如果原型內也找不到,就到原型的原型上去找,直到找到該方法。而這構成的鏈就是原型鏈。如下圖

2、關于原型鏈的規律總結

當 new 一個函數的時候會創建一個對象,『函數.prototype』 等于 『被創建對象.__proto__』

一切函數都是由 Function 這個函數創建的,所以『Function.prototype === 被創建的函數.__proto__』

一切函數的原型對象都是由 Object 這個函數創建的,所以『Object.prototype ===
一切函數.prototype.__proto__』

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100731.html

相關文章

  • 《javascript高級程序設計》筆記原型圖解

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

    vspiders 評論0 收藏0
  • JavaScript學習第十天筆記(繼承)

    摘要:繼承原型鏈如果構造函數或對象的原型指向構造函數或對象,的原型再指向構造函數或對象,以此類推,最終的構造函數或對象的原型指向的原型。 繼承 原型鏈 如果構造函數或對象A的原型指向構造函數或對象B,B的原型再指向構造函數或對象C,以此類推,最終的構造函數或對象的原型指向Object的原型。由此形成了一條鏈狀結構,被稱之為原型鏈。按照上述的描述,在B中定義的屬性或方法,可以在A中使用并不需要...

    baiy 評論0 收藏0
  • [學習筆記] 小角度看JS原型

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

    Cciradih 評論0 收藏0
  • 《javascript高級程序設計》筆記:繼承

    摘要:繼承和前面兩篇文章中的知識非常相關,如果對函數創建原理和原型鏈不熟悉,請猛戳高級程序設計筆記創建對象高級程序設計筆記原型圖解繼承,通俗的說,就是將自身不存在的屬性或方法,通過某種方式為自己所用文章分別介紹原型鏈繼承繼承借用構造函數繼承組合繼 繼承和前面兩篇文章中的知識非常相關,如果對函數創建原理和原型鏈不熟悉,請猛戳:《javascript高級程序設計》筆記:創建對象《javascri...

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

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

    EasonTyler 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<