摘要:面向?qū)ο蟾攀龊唵蔚母攀鲆韵旅嫦驅(qū)ο竺嫦驅(qū)ο笞兂傻娜Q為,簡稱。面向?qū)ο缶幊炭梢钥醋鲿r(shí)使用一系列對(duì)象相互協(xié)作的軟件設(shè)計(jì)。面向?qū)ο缶幊痰娜齻€(gè)重要特征封裝,繼承,多態(tài)。構(gòu)造函數(shù)的方法內(nèi)關(guān)鍵字會(huì)指向當(dāng)前對(duì)象。凍結(jié)對(duì)象禁止對(duì)對(duì)象執(zhí)行任何修改操作。
面向?qū)ο?/b> 概述
簡單的概述以下面向?qū)ο?/p>
面向?qū)ο笞兂傻娜Q為object oriented programming, 簡稱oop。 面向?qū)ο缶幊虝r(shí)用抽象的方式創(chuàng)建基于現(xiàn)實(shí)世界模型的一種編程模式。
面向?qū)ο缶幊炭梢钥醋鲿r(shí)使用一系列對(duì)象相互協(xié)作的軟件設(shè)計(jì)。面向?qū)ο缶幊淘O(shè)計(jì)的目的時(shí)在編程中促進(jìn)更好的靈活性和可維護(hù)性。憑借其對(duì)模塊化的重視,面向?qū)ο蟮拇a開發(fā)更簡單,更容易理解。面向?qū)ο缶幊痰娜齻€(gè)重要特征:( 1 封裝,2 繼承,3 多態(tài))。
所有的程序是由一定的屬性和行為對(duì)象組成的,不同的對(duì)象的訪問通過函數(shù)調(diào)用來完成,對(duì)詳間所有的交流都是通過方法調(diào)用,通過對(duì)封裝對(duì)象數(shù)據(jù),提高復(fù)用率。
向?qū)ο笫鞘裁?/p>
JavaScript是一種基于原型的面向?qū)ο笳Z言,而不是基于類的。正是由于這一種根本的區(qū)別,其如何創(chuàng)建對(duì)象的層級(jí)結(jié)構(gòu)以及對(duì)象的屬性與屬性值是如何繼承的并不是那么清晰。
基于原型的語言(如JavaScript) 并不是在這種區(qū)別:它只有對(duì)象?;谠偷恼Z言具有所謂原型對(duì)象(prototypcal object) 的概念。原型對(duì)象可以作為一個(gè)模板,新對(duì)象可以從中獲取原始的屬性。任何對(duì)象都可以指定其自身的屬性,既可以是創(chuàng)建時(shí)也可以在運(yùn)行創(chuàng)建時(shí)。而且任何對(duì)象都可以作為另一個(gè)對(duì)象的原型(prototype),從而允許后者共享前者的屬性。
封裝
所謂封裝就是按照要求使用并得到對(duì)應(yīng)的結(jié)果,而不需要知道其真實(shí)的執(zhí)行原理是怎么樣的
封裝主要用于闡述對(duì)象所包含的內(nèi)容,他們通常由兩個(gè)部分組成:
1相關(guān)的數(shù)據(jù)(用于存儲(chǔ)屬性) 2基于這些數(shù)據(jù)所能作的事情
繼承
繼承通常是指類與類之間的關(guān)系。如果兩個(gè)類都具有相同的屬性或方法,那么可以讓一個(gè)繼承于另一個(gè)類,這樣就不需要在前者再次定義同樣的屬性或方法。
創(chuàng)建一個(gè)或者多個(gè)類的專門版本類方式為繼承。創(chuàng)建的專本版本的類通常叫做子類,另外的類通常叫做父類。在JavaScript中,繼承通過賦予子類一個(gè)父類的實(shí)例并專門化子類來實(shí)現(xiàn)
多態(tài)
不同的對(duì)象可以定義具有相同名稱的方法,方法是作用于所在的對(duì)象中。這種不同對(duì)象通過相同方法的調(diào)用實(shí)現(xiàn)各自行為的能力,被稱之為多態(tài)。
構(gòu)造函數(shù)構(gòu)造函數(shù)
構(gòu)造函數(shù)由稱之為構(gòu)造器或?qū)ο竽0?,是?duì)象中的一個(gè)方法,在實(shí)例化是構(gòu)造器被調(diào)用。在JavaScript中函數(shù)就可以作為構(gòu)造器使用,因此不需要特別的定義一個(gè)構(gòu)造器方法。
function person(){ console。log(‘person instantiated’);
}
var person = new person ();
這里的person()并不是作為函數(shù) 而是構(gòu)造函數(shù)。
創(chuàng)建person對(duì)象需要使用new關(guān)鍵自
構(gòu)造函數(shù)的實(shí)行
構(gòu)造函數(shù)的屬性實(shí)際上就是對(duì)象的變量。一個(gè)對(duì)象可以包闊多個(gè)屬性,定義構(gòu)造函數(shù)屬性是使用this這是關(guān)鍵字。
function Person (firstname){
this.firstname =firstName;
console.log (‘person instanttiated’);
}
var person = new person (‘Alice’);
console。log (‘person is +person。firstname’);
構(gòu)造函數(shù)的方法
構(gòu)造函數(shù)的方法想構(gòu)造函數(shù)的屬性,不同的是方法是以惡函數(shù)(或像函數(shù)一個(gè)樣被定義)。定義構(gòu)造函數(shù)的方法時(shí)使用this關(guān)鍵詞。
var person = function(firstname){
this.firstname = firstName;
this.sayhello = function () {
console.log ("hello, I"m+this.firstName");
};
};
var person = new person (Alice);
person.sayhello();
this這個(gè)關(guān)鍵詞
JavaScript 有一套完全不同于其他語言的對(duì)this處理機(jī)制,this 關(guān)鍵字本身沒有任何含義,比如下記中不同的情況下,this指向的各種不同。
全局范圍內(nèi):this關(guān)鍵字會(huì)指向全局對(duì)象。
this。a = 10 //global。a=10
console.log(a);//10
構(gòu)造函數(shù)內(nèi):this 關(guān)鍵字會(huì)指向新創(chuàng)建的對(duì)象。
構(gòu)造函數(shù)的方法內(nèi):this關(guān)鍵字會(huì)指向當(dāng)前對(duì)象。
var hero={};
hero.sayName = function (){
return "hello " +this.name;
}
屬性描述符
JavaScript提供里一個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu),用于描述對(duì)象的值,控制其行為,例如該屬性是否可寫,是否可配置,是否修改以及是否可枚舉等。這個(gè)數(shù)據(jù)結(jié)構(gòu)被稱為"屬性描述符"。
每一個(gè)屬性都有自己對(duì)應(yīng)的屬性描述符,保存屬性的元信息。
{
value :‘臥龍學(xué)院’,
writable:false,
enumerable:true,
configurable:false,
get:undefined,
set:undefind
}
對(duì)象里面目前存在的屬性描述符有兩種主要形式:數(shù)據(jù)描述符和存儲(chǔ)描述符。
數(shù)據(jù)描述符
數(shù)據(jù)描述符是一個(gè)具有值得屬性,該值可能是可寫的,也可能不是可寫的。該數(shù)據(jù)描述符具有以下可選建值:
value:該屬性對(duì)應(yīng)的值??梢允侨魏斡行У腏avaScript值(數(shù)值 對(duì)象,函數(shù)等。默認(rèn)為undefined)
writable:當(dāng)且僅當(dāng)該屬性的writable 為true時(shí),value才能被賦值運(yùn)算符改變。默認(rèn)為false。
configurable:當(dāng)且僅當(dāng)該屬性的configurable為true時(shí),該屬性描述符才能夠被改變,同時(shí)該屬性也能從對(duì)應(yīng)的對(duì)向上被刪除。默認(rèn)為false。
enumerable:當(dāng)且僅當(dāng)該屬性的enumerable為true時(shí),該屬性才能夠出現(xiàn)在對(duì)向上的枚舉屬性中默認(rèn)為false
存儲(chǔ)描述符
存取描述符時(shí)由getter-setter 函數(shù)對(duì)描述的屬性。存取描述符具有以下可選建值:
get:給屬性提供getter方法,如果沒有g(shù)etter則為undefined。當(dāng)訪問該屬性時(shí),該方法會(huì)被執(zhí)行,方法執(zhí)行時(shí)沒有參數(shù)傳入,但是會(huì)傳入this對(duì)象。
set:給屬性提供setter的方法,如果沒有setter則為undefined。當(dāng)屬性值修改時(shí),觸發(fā)執(zhí)行該方法。該方法將接受唯一參數(shù),及該屬性新的參數(shù)值。
configurable:當(dāng)且僅當(dāng)該屬性的writable 為true時(shí) ,該屬性描述符才能夠被該表,同時(shí)屬性也能從對(duì)應(yīng)的對(duì)象上被刪除。默認(rèn)為false。
enumerable:當(dāng)且僅當(dāng)該屬性的enumerable為true時(shí),該屬性才能夠出現(xiàn)在對(duì)象的枚舉屬性中。
默認(rèn)為false
獲取屬性描述符
ObjectgetowmpropretyDescriptor()方法返回指定對(duì)象上一個(gè)自由屬性對(duì)應(yīng)的屬性描述符。
obj:需要查找的目標(biāo)對(duì)像,
prop:目標(biāo)對(duì)象內(nèi)屬性名稱(string類型)。
返回值:如果指定的屬性存在于對(duì)向上,則返回其屬性描述符對(duì)象,否則返回undefined。
設(shè)置屬性描述符
objectdefineproperty()方法為對(duì)象定義屬性改變現(xiàn)有屬性,并返回該對(duì)象。
obj:要在其上頂會(huì)議屬性的對(duì)象。
prop:要定義或者修改的屬性名稱。
descriptor:將被定義或修改的屬性描述符。
返回值:被傳遞給函數(shù)的對(duì)象。
objectdefineproperties()方法為對(duì)象定義一個(gè)或者多個(gè)新屬性或修改現(xiàn)有屬性,并返回該對(duì)象。
obj:要在其上定義屬性的對(duì)象。
props:要定義其可枚舉屬性或修改的修改屬性描述符的對(duì)象。
返回值:被傳遞給函數(shù)的對(duì)象。
屬性描述符的可選建值
writable:Boolean值,表示目標(biāo)屬性的值是否可以內(nèi)修改。當(dāng)且僅當(dāng)該屬性的writable為true時(shí),value才能被賦值元算符該表。默認(rèn)為false。
屬性描述符的可選鍵值
configurable:Boolean值,表示目標(biāo)屬性的描述符是否可以被修改。當(dāng)且僅當(dāng)該屬性的configurable為true時(shí),該屬性描述符才能夠被該表,同時(shí)該屬性也能從對(duì)應(yīng)的對(duì)向上被刪除。默認(rèn)為false
enumerable:Boolean值,表示目標(biāo)屬性是否可遍歷。當(dāng)且僅當(dāng)該屬性的enumerable為true時(shí),
該屬性才能夠被出現(xiàn)在對(duì)象的枚舉屬性中。默認(rèn)為false。
如果對(duì)象的屬性的enumerable的值為false,以下三種操作取不到的屬性:
for in
objectkey()方法
jsonstring()方法
屬性描述符的存儲(chǔ)器
對(duì)象的屬性除了可以直接定義以外,還可以使用存儲(chǔ)器進(jìn)行定義。其中setter為存儲(chǔ)函數(shù),使用屬性描述符中的set;getter為取值函數(shù),使用屬性喵符中的get
防篡改
定義的對(duì)象默認(rèn)在任何時(shí)候,任何位置,無論有意義的還是無意義的都可以修改對(duì)象的屬性或方法。而這些篡改可能會(huì)影響內(nèi)置屬性或方法,從而導(dǎo)致對(duì)象的正常功能可能無法使用。
JavaScript在ecmascrip5版本中新增字放置篡改對(duì)象的屬性或方法的機(jī)制,共提供了以下三級(jí)保護(hù)方式:
禁止拓展:禁止為對(duì)象擴(kuò)展新的屬性或方法
密封對(duì)象:禁止擴(kuò)展新的屬性或方法,禁止配置現(xiàn)有的屬性或方法描述符,僅允許讀寫屬性的值。
凍結(jié)對(duì)象:禁止對(duì)對(duì)象執(zhí)行任何修改操作。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/108183.html
摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個(gè)屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對(duì)象事件框架選擇框架。核心模塊和對(duì)象全局對(duì)象,,,事件驅(qū)動(dòng),事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶端。 第一階段: HTML+CSS:HTML進(jìn)階、CSS進(jìn)階、div+css布局、HTML+css整站開發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對(duì)...
摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個(gè)屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對(duì)象事件框架選擇框架。核心模塊和對(duì)象全局對(duì)象,,,事件驅(qū)動(dòng),事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶端。 第一階段: HTML+CSS:HTML進(jìn)階、CSS進(jìn)階、div+css布局、HTML+css整站開發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對(duì)...
摘要:面向?qū)ο竺嫦驅(qū)ο蟮娜N基本特征繼承封裝多態(tài)結(jié)構(gòu)化程序設(shè)計(jì)簡介主要原則自頂向下逐步求精模塊化。在面向?qū)ο蠓椒ㄖ校愔g共享屬性和操作的機(jī)制稱為繼承。 面向?qū)ο?面向?qū)ο蟮娜N基本特征:繼承、封裝、多態(tài) 結(jié)構(gòu)化程序設(shè)計(jì)簡介 主要原則:自頂向下、逐步求精、模塊化。 結(jié)構(gòu)化分析SA方法對(duì)系統(tǒng)進(jìn)行需求分析;結(jié)構(gòu)化設(shè)計(jì)SD方法對(duì)系統(tǒng)進(jìn)行概要設(shè)計(jì)、詳細(xì)設(shè)計(jì);結(jié)構(gòu)化編程SP方法來實(shí)現(xiàn)系統(tǒng)。 結(jié)構(gòu)化程序...
摘要:年月宣布支持時(shí)間延長到年。更詳細(xì)的發(fā)布列表參閱官網(wǎng)的版本號(hào)分為三段,形如。其中表示大版本號(hào),一般當(dāng)整體重寫,或出現(xiàn)不向后兼容的改變時(shí),增加表示功能更新,出現(xiàn)新功能時(shí)增加表示小的改動(dòng)如修復(fù)了某個(gè),只要有修改就增加。年公司正式發(fā)布。 < 返回索引頁 Python語言簡介 Python介紹及發(fā)展 介紹 Python 官方網(wǎng)站:https://www.python.org/, 大家可以到此處下...
閱讀 3351·2021-10-13 09:40
閱讀 2586·2021-10-08 10:17
閱讀 3989·2021-09-28 09:45
閱讀 922·2021-09-28 09:35
閱讀 1805·2019-08-30 10:51
閱讀 2898·2019-08-26 12:11
閱讀 1645·2019-08-26 10:41
閱讀 3090·2019-08-23 17:10