亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

淺談JS的原型和繼承

2024-05-06 16:50:37
字體:
來源:轉載
供稿:網友

參考文獻

JavaScript原型與繼承的秘密

__proto__

除null和undefined,JS中的所有數據類型都有這個屬性; 它表示當我們訪問一個對象的某個屬性時,如果該對象自身不存在該屬性, 就從它的__proto__屬性上繼續查找,以此類推,直到找到,若找到最后還是沒有找到,則結果為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規范中才被準確定義, 目的是為了給這個傳統的功能定制一個標準,以確保瀏覽器間的兼容性。通過使用__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

constructor

constructor表示一個對象的構造函數,除null和undefined,JS中的所有數據類型都有這個屬性; 我們可通過下面的代碼來驗證一下:

null.constructor // Uncaught TypeError: Cannot read property 'constructor' of null ...undefined.constructor // Uncaught TypeError: Cannot read property 'constructor' of undefined ... (true).constructor // ƒ Boolean() { [native code] }(1).constructor // ƒ Number() { [native code] }"hello".constructor // ƒ String() { [native code] }

一個對象的constructor屬性確切地說并不是存在這個對象上面的; 而是存在這個對象的原型上(如果是多級繼承需手動修改原型的constructor屬性),我們可用下面的代碼來解釋一下:

const F = function() {};// 當我們定義一個函數的時候,這個函數的prototype屬性上面的constructor屬性指向自己本身F.prototype.constructor === F; // true

對JS的原始類型(stringnumberbooleannullundefinedsymbol (new in ECMAScript 2015)),它們的constructor屬性是只讀的,不可修改:

(1).constructor = "something";console.log((1).constructor); // 輸出 ƒ Number() { [native code] }

如果真想改這些原始類型的constructor屬性,也不是不可以:

Number.prototype.constructor = "number constructor";(1).constructor = 1;console.log((1).constructor); // 輸出 number constructor

當然上面的方式不推薦

以上所述是小編給大家介紹的JS原型和繼承詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
性色av一区二区三区免费| 国产欧美日韩免费| 亚洲综合第一页| 一本色道久久88亚洲综合88| 欧美巨乳美女视频| 亚洲精品国产福利| 欧美日韩精品中文字幕| 亚洲图片在线综合| 日韩免费观看网站| 久久色在线播放| 色视频www在线播放国产成人| 97在线观看免费高清| 日韩av在线一区二区| 神马久久桃色视频| 欧美日韩国产二区| 国产日韩欧美夫妻视频在线观看| 国产成人亚洲精品| 亚洲国产精品成人精品| 国产精品成人av在线| 91久久久久久久久久| 清纯唯美亚洲激情| 91精品视频免费看| 久久精品色欧美aⅴ一区二区| 2020国产精品视频| 久久亚洲影音av资源网| 欧美色道久久88综合亚洲精品| 久久夜色精品国产亚洲aⅴ| 日韩成人在线电影网| 国产成人精品免费视频| 国产精品视频最多的网站| 青草热久免费精品视频| 国产成人精品在线视频| 日韩精品中文字幕视频在线| 亚洲成人激情图| 色偷偷亚洲男人天堂| 中文字幕综合一区| 久久精品电影一区二区| 日韩女优在线播放| 亚洲图片在线综合| 国产自产女人91一区在线观看| 欧美国产日韩一区二区在线观看| 亚洲大胆人体在线| 久久久中精品2020中文| 欧美成人国产va精品日本一级| 亚洲码在线观看| 亚洲伊人一本大道中文字幕| 日韩av电影国产| 97香蕉超级碰碰久久免费的优势| 欧美综合在线第二页| 国产精品第一页在线| 欧美日韩国产一区中文午夜| 97免费视频在线| 最近2019好看的中文字幕免费| 国产精品白丝av嫩草影院| 性欧美亚洲xxxx乳在线观看| 国产欧美日韩免费看aⅴ视频| 日本精品视频在线观看| 久久久久久久97| 国产免费观看久久黄| 欧美精品video| 美女视频黄免费的亚洲男人天堂| 91精品视频一区| 日韩乱码在线视频| 免费91在线视频| 97精品国产aⅴ7777| 69精品小视频| 久久精品视频网站| www.99久久热国产日韩欧美.com| 黑人巨大精品欧美一区二区免费| 国产欧美欧洲在线观看| 久久人人看视频| 国产精品青青在线观看爽香蕉| 欧美一区二区三区……| 伊人久久精品视频| 久热精品视频在线免费观看| 中日韩美女免费视频网站在线观看| 欧美肥老妇视频| 国产精品一二三在线| 日韩在线视频中文字幕| 日韩免费在线观看视频| 久久精品福利视频| 亚洲xxxx视频| 亚洲在线免费观看| 国产精品福利无圣光在线一区| 久久久精品久久久| 欧美高清一级大片| 国产一区二区三区丝袜| 成人网在线视频| 日韩精品在线观看一区| 久久久精品视频在线观看| 亚洲一区二区三区久久| 欧美肥老太性生活视频| 2018中文字幕一区二区三区| 亚洲亚裔videos黑人hd| 欧美日韩在线视频一区| 欧美精品videosex极品1| 91精品久久久久久久| 国产成人一区二区在线| 欧美性69xxxx肥| 国产精品成人观看视频国产奇米| 欧美午夜片欧美片在线观看| 午夜精品在线观看| 九九九热精品免费视频观看网站| 亚洲欧美日韩另类| 国产精品自拍偷拍视频| 日韩av中文字幕在线免费观看| 欧美日韩免费区域视频在线观看| 久久精品视频在线| 日韩免费电影在线观看| 福利视频第一区| 最近2019中文字幕第三页视频| 国产91精品久久久久久| 欧美激情精品久久久久| 亚洲欧美另类在线观看| 91最新国产视频| 日韩免费黄色av| 尤物tv国产一区| 久久久久国产视频| 91成人国产在线观看| 97婷婷涩涩精品一区| 精品美女永久免费视频| 美女扒开尿口让男人操亚洲视频网站| 欧美大奶子在线| 欧美在线视频一二三| 国产一区二区在线播放| 国产精品久久久久9999| 91精品国产91| 欧美精品video| 亚洲老头同性xxxxx| 日韩中文字幕不卡视频| 538国产精品一区二区免费视频| 日韩欧美国产高清91| 欧美性jizz18性欧美| 欧美午夜片在线免费观看| 国产偷国产偷亚洲清高网站| 深夜福利91大全| 欧美成人小视频| 国产不卡精品视男人的天堂| 色樱桃影院亚洲精品影院| 一区二区欧美久久| 亚洲美女av电影| 国产精品96久久久久久| 欧洲亚洲免费在线| 亚洲国产精品成人精品| 在线观看欧美视频| 欧美电影免费看| 日韩免费观看av| 日韩视频在线免费| 国产精品狠色婷| 亚洲激情在线观看视频免费| 在线观看精品国产视频| 中文字幕欧美日韩在线| 亚洲精品99久久久久| 欧美一级片久久久久久久| 中文字幕在线成人| 中文字幕亚洲激情| 日韩中文字幕视频在线观看| 国产成人综合久久| 日韩中文字幕免费视频| 在线观看免费高清视频97| 国产精品白丝jk喷水视频一区| 国产精品久久久久久搜索| 亚洲欧美日韩国产精品| 国产精品mp4|