国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

深入了解js原型模式

2024-05-06 15:38:41
字體:
來源:轉載
供稿:網友

一、什么是原型模式

在js中,創建對象的方式有工廠模式和構造函數模式等; 而構造函數模式最大的問題在于:構造函數中的每個方法都需要在實例對象中重新創建一遍,不能復用,所以為了解決這一個問題,就需要使用原型模式來創建對象。
原型模式是把所有實例共享的方法和屬性放在一個叫做prototype(原型)的屬性中 ,在創建一個函數時都會有個prototype屬性, 這個屬性是一個指針,指向一個對象,是通過調用構造函數而創建的那個對象實例的原型對象。

// 構造函數function Person() {};// 原型屬性prototypePerson.prototype.name = '張三';Person.prototype.sayName = function() {console.log(this.name);};let person1 = new Person();person1.sayName(); //張三let person2 = new Person();person2.sayName(); // 張三console.log(person1.sayName == person2.sayName); //true

1.理解原型對象

無論什么時候,只要創建了一個新函數,就會根據一組特定的規則為該函數創建一個prototype屬性,這個屬性指向函數的原型對象,在默認的情況下,所有的原型對象都自動獲得一個constructor(構造函數)屬性,這是一個指針,指向prototype屬性所在的函數。創建了自定義的構造函數之后,其原型對象默認只會取得constructor屬性;其他的方法則是從Object繼承來的。

當調用構造函數創建一個新實例對象后,該實例的內部將包含一個指針[[Prototype]],指向構造函數的原型對象。這個連接存在于實例和構造函數的原型對象之間,而不是存在實例和構造函數之間。

每當代碼讀取某個對象的某個屬性時,都會執行一次搜索,目標是具有給定名字的屬性。搜索首先從對象實例本身開始。如果在實例中找到了就返回該屬性的值,沒有找到,則繼續搜索指針指向的原型對象,在原型對象中查找具有給定名字的屬性,如果在原型對象中找到了這個屬性,就返回該屬性的值。

雖然可以通過實例訪問保存在原型中的值,但不能通過實例對象重寫原型中的值,如果在實例中添加一個在原型中的同名屬性,該屬性會自動屏蔽原型中的屬性,但是不會修改原型中的屬性,只會阻止訪問原型中的屬性,通過delete操作符則可以完全刪除實例屬性,使得可以重新訪問原型中的屬性。

2.原型與in操作符

hasOwnProperty()方法可以檢測一個屬性是否存在于實例對象中,

// 構造函數function Person() {this.age = 16;};Person.prototype.name = "張三";let person1 = new Person();console.log(person1.hasOwnProperty('name')); // falseconsole.log(person1.hasOwnProperty('age')); // true

in操作符的使用可以分為兩類,單獨使用和在for-in循環使用,在單獨使用時,in操作符會在通過對象能夠訪問給定屬性時返回true,無論該屬性存在于實例中還是原型中。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 慈溪市| 浪卡子县| 马尔康县| 化州市| 宝清县| 无为县| 漾濞| 军事| 肥乡县| 大宁县| 阜平县| 盈江县| 永川市| 从江县| 庆安县| 宝山区| 静乐县| 温宿县| 泾阳县| 北海市| 孝义市| 南皮县| 通许县| 彭山县| 锡林郭勒盟| 石嘴山市| 肇庆市| 霞浦县| 孝昌县| 石首市| 齐齐哈尔市| 衡东县| 朝阳市| 图木舒克市| 太湖县| 台东市| 星子县| 泉州市| 耒阳市| 东城区| 碌曲县|