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

首頁 > 語言 > JavaScript > 正文

淺談JS的原型和繼承

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

參考文獻

JavaScript原型與繼承的秘密

__proto__

除null和undefined,JS中的所有數據類型都有這個屬性; 它表示當我們訪問一個對象的某個屬性時,如果該對象自身不存在該屬性, 就從它的__proto__屬性上繼續(xù)查找,以此類推,直到找到,若找到最后還是沒有找到,則結果為undefined

我們把一個對象的__proto__屬性所指向的對象叫該對象的原型;我們可以修改一個對象的原型來讓這個對象擁有某種屬性或某個方法

// 修改一個Number類型的值的原型const num = 1;num.__proto__.name = "My name is 1";console.log(num.name); // My name is 1 // 修改一個對象的原型const obj = {};obj.__proto__.name = "dreamapple";console.log(obj.name); // dreamapple

需注意的是,__proto__屬性雖多數瀏覽器支持,但其實它僅在ECMAScript 2015規(guī)范中才被準確定義, 目的是為了給這個傳統的功能定制一個標準,以確保瀏覽器間的兼容性。通過使用__proto__屬性來修改一個對象的原型非常慢且影響性能。 所以,若想獲取一個對象的原型,推薦用Object.getPrototypeOf 或Reflect.getPrototypeOf,設置一個對象的原型推薦用Object.setPrototypeOf或Reflect.setPrototypeOf

prototype

首先要記住的是,該屬性一般只存在于函數對象上; 只要是能作為構造器的函數,都包含這個屬性。即只要這個函數能通過new生成一個新對象, 那么這個函數肯定具有prototype屬性。因為我們自定義的函數都可通過new生成一個對象,所以我們自定義的函數都有prototype 這個屬性

// 函數字面量console.log((function(){}).prototype); // {constructor: ƒ} // Date構造器console.log(Date.prototype); // {constructor: ƒ, toString: ƒ, toDateString: ƒ, toTimeString: ƒ, toISOString: ƒ, …} // Math.abs 不是構造器,不能通過new操作符生成一個新的對象,所以不含有prototype屬性console.log(Math.abs.prototype); // undefined

prototype屬性有什么作用呢?作用就是:函數通過new生成的一個對象, 這個對象的原型(__proto__)指向該函數的prototype屬性:

// 其中F表示一個自定義的函數或者是含有prototype屬性的內置函數new F().__proto__ === F.prototype // true // 通過函數字面量定義的函數的__proto__屬性都指向Function.prototype(function(){}).__proto__ === Function.prototype // true // 通過對象字面量定義的對象的__proto__屬性都是指向Object.prototype({}).__proto__ === Object.prototype // true // Object函數的原型的__proto__屬性指向nullObject.prototype.__proto__ === null // true // 因為Function本身也是一個函數,所以Function函數的__proto__屬性指向它自身的prototypeFunction.__proto__ === Function.prototype // true // 因為Function的prototype是一個對象,所以Function.prototype的__proto__屬性指向Object.prototypeFunction.prototype.__proto__ === Object.prototype // true            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 万全县| 凌源市| 老河口市| 陆丰市| 岑溪市| 公主岭市| 德清县| 桂平市| 双桥区| 鸡东县| 秭归县| 绥宁县| 蚌埠市| 江阴市| 沂水县| 双辽市| 榕江县| 栾川县| 伊宁市| 吉安县| 三原县| 应城市| 和硕县| 福州市| 拉孜县| 措勤县| 紫金县| 抚远县| 岗巴县| 都昌县| 苍南县| 新民市| 江城| 喜德县| 胶南市| 五华县| 南澳县| 平邑县| 乌兰浩特市| 长垣县| 特克斯县|