當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JavaScript --- [学习笔记] 原型模式
生活随笔
收集整理的這篇文章主要介紹了
JavaScript --- [学习笔记] 原型模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
說明
- 接JavaScript — > [學習筆記]觀察者模式 & 理解對象 & 工廠模式 & 構造函數模式
- 上一篇構造函數模式創建的實例,不同實例的同一個方法是不相等的,為了解決這個問題.出現了原型模式
1. 原型模式
- 具體做法是,不在構造函數中定義對象實例的信息,而是將這些信息直接添加到原型對象中
1.1 理解原型對象
1.1.1 prototype屬性和constructor屬性
- 創建一個函數(Person),就會根據一組規則創建一個prototype屬性(Person.prototype)
- prototype上面還要一個constructor屬性(必帶技能),它(Person.prototype.constructor)指向函數Person
- prototype屬性上的所有屬性和方法會被所有使用new操作符生產的實例(person1, person2)共享
- 實例person1、person2通過new Person得到,會有一個[[Prototype]]的指針(在瀏覽器中通過__proto__訪問),它指向Person.prototype
1.1.2 讀取某個屬性的順序
- 讀取屬性的模擬函數如下:
說明:
1.1.3 說說
通過上面的原型找屬性的順序,可以知道:
1.2 區分一個屬性是否來自原型
需要明白下面2點:
1.3 Object.defineProperty
- Object.defineProperty: 可以給一個對象添加屬性,并對屬性進行描述
- 使用如下:
1.3.1 數據屬性和訪問器屬性
- [[Configurabal]]: 是否能被delete刪除
- [[Numerable]]: 是否能被for-in循環訪問屬性
- [[Writeble]]: 是否可以被修改
- [[Value]]: 屬性的值
1.3.2 Object.defineProperty的使用
- 在使用對象字面量對函數的原型進行賦值的時候,會丟失原本的constructor屬性
- 使用Object.defineProperty為它加上constructor屬性
1.4 原型的動態性
- 可以先創建實例后修改原型
- 將上述代碼修改為下面:
- 此時在調用friend.sayHi會報錯: Uncaught TypeError: p1.sayHi is not a function, 原因如下:
注:重寫原型對象切斷了現有原型與任何之前已經存在的對象實例之間的聯系.
總結
以上是生活随笔為你收集整理的JavaScript --- [学习笔记] 原型模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HFT-CNN:层级多标签分类,让你的模
- 下一篇: javascript --- 实现对