摘要:反射反射機(jī)制是指程序可以訪問(wèn)檢測(cè)和修改它本身狀態(tài)或行為的一種能力??梢岳梅瓷錂C(jī)制繼承。中沒(méi)有繼承機(jī)制,但是可以對(duì)某一個(gè)類(lèi)的成員通過(guò)反射機(jī)制逐一復(fù)制,然后再修改需要覆蓋的成員,就可以達(dá)到繼承的效果。
反射
反射機(jī)制是指程序可以訪問(wèn)、檢測(cè)和修改它本身狀態(tài)或行為的一種能力。對(duì)于JavaScript,簡(jiǎn)單來(lái)說(shuō),就是對(duì)類(lèi)的成員進(jìn)行修改等操作。
js可以通過(guò)for(...in...)來(lái)實(shí)現(xiàn)反射。
繼承JavaScript中沒(méi)有專(zhuān)門(mén)的機(jī)制來(lái)實(shí)現(xiàn)類(lèi)的繼承,但可以通過(guò)復(fù)制一個(gè)類(lèi)的prototype到另外一個(gè)類(lèi)來(lái)實(shí)現(xiàn)繼承。
function Helloclass() { //構(gòu)造函數(shù) } function Hellosubclass() { //構(gòu)造函數(shù) } Hellosubclass.prototype = Helloclass.prototype; Hellosubclass.prototype.Propertys = "name"; Hellosubclass.prototype.Methods = function() { //方法示例代碼 } var obj = new Hellosubclass();
以上并非嚴(yán)格的繼承,兩個(gè)類(lèi)是同一prototype的引用,Helloclass與Hellosubclass共享同一個(gè)prototype,重寫(xiě)一個(gè)類(lèi)的成員或方法會(huì)影響另一個(gè)。
可以利用反射機(jī)制繼承。利用for(...in...)語(yǔ)句枚舉出所有基類(lèi)prototype成員,并將其賦值給prototype對(duì)象。進(jìn)一步,可以為每個(gè)類(lèi)添加一個(gè)共有的方法用來(lái)實(shí)現(xiàn)類(lèi)的繼承:
function.prototype.inherit=function(baseClass) { for(var p in baseClass.prototype) { this.prototype[p] = baseClass.prototype[p]; } }
可以看出,所謂的反射機(jī)制,從簡(jiǎn)單方面來(lái)講,就是對(duì)類(lèi)中成員進(jìn)行枚舉、修改等操作的能力。如果存在一種機(jī)制,在不知道某一個(gè)類(lèi)中到底有什么函數(shù),或者成員變量的情況下就可以對(duì)其操作(例如,js可以對(duì)類(lèi)成員進(jìn)行枚舉),這種機(jī)制就可以成為反射。
js中沒(méi)有繼承機(jī)制,但是可以對(duì)某一個(gè)類(lèi)的成員通過(guò)反射機(jī)制“逐一復(fù)制”,然后再修改需要“覆蓋”的成員,就可以達(dá)到“繼承”的效果。這也是反射機(jī)制的一個(gè)應(yīng)用。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/87564.html
摘要:現(xiàn)代的面向?qū)ο蟮乃枷氩粡?qiáng)調(diào)為真實(shí)世界建模變得更加理性化一些,把目標(biāo)放在解耦上。各種語(yǔ)言中的多態(tài)多態(tài)確切的含義是同一類(lèi)的對(duì)象收到相同消息時(shí),會(huì)得到不同的結(jié)果。小結(jié)本章主要介紹面向?qū)ο笏枷氲某绦虻慕M成元素類(lèi)和對(duì)象。 第一章 面向?qū)ο笏枷氲暮诵母拍?showImg(https://segmentfault.com/img/bVNfjM?w=673&h=334); showImg(https:...
摘要:與都繼承自類(lèi),在中也是使用字符數(shù)組保存字符串,,這兩種對(duì)象都是可變的。采用字節(jié)碼的好處語(yǔ)言通過(guò)字節(jié)碼的方式,在一定程度上解決了傳統(tǒng)解釋型語(yǔ)言執(zhí)行效率低的問(wèn)題,同時(shí)又保留了解釋型語(yǔ)言可移植的特點(diǎn)。 String和StringBuffer、StringBuilder的區(qū)別是什么?String為什么是不可變的? String和StringBuffer、StringBuilder的區(qū)別 可變性...
摘要:大多數(shù)待遇豐厚的開(kāi)發(fā)職位都要求開(kāi)發(fā)者精通多線程技術(shù)并且有豐富的程序開(kāi)發(fā)調(diào)試優(yōu)化經(jīng)驗(yàn),所以線程相關(guān)的問(wèn)題在面試中經(jīng)常會(huì)被提到。將對(duì)象編碼為字節(jié)流稱(chēng)之為序列化,反之將字節(jié)流重建成對(duì)象稱(chēng)之為反序列化。 JVM 內(nèi)存溢出實(shí)例 - 實(shí)戰(zhàn) JVM(二) 介紹 JVM 內(nèi)存溢出產(chǎn)生情況分析 Java - 注解詳解 詳細(xì)介紹 Java 注解的使用,有利于學(xué)習(xí)編譯時(shí)注解 Java 程序員快速上手 Kot...
摘要:可實(shí)現(xiàn)單例模式代碼塊初始化靜態(tài)變量,只被執(zhí)行一次內(nèi)部類(lèi)不能與外部類(lèi)重名,只能訪問(wèn)外部類(lèi)靜態(tài)數(shù)據(jù)包括私有多分支選擇整型或字符類(lèi)型變量或整數(shù)表達(dá)式開(kāi)始支持。 前言 大學(xué)期間接觸 Java 的時(shí)間也不短了,不論學(xué)習(xí)還是實(shí)習(xí),都讓我發(fā)覺(jué)基礎(chǔ)的重要性?;ヂ?lián)網(wǎng)發(fā)展太快了,各種框架各種技術(shù)更新迭代的速度非???,可能你剛好掌握了一門(mén)技術(shù)的應(yīng)用,它卻已經(jīng)走在淘汰的邊緣了。 而學(xué)習(xí)新技術(shù)總要付出一定的時(shí)間...
閱讀 3182·2021-11-22 15:25
閱讀 3860·2021-11-17 09:33
閱讀 3375·2021-11-08 13:15
閱讀 3055·2021-09-22 10:56
閱讀 546·2021-08-31 09:45
閱讀 2758·2019-08-30 13:49
閱讀 3085·2019-08-30 12:52
閱讀 1149·2019-08-29 17:05