摘要:面向?qū)ο竺嫦驅(qū)ο缶幊痰娜Q是,簡(jiǎn)稱,面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)世界模型的一種編程模式。面向?qū)ο缶幊痰娜齻€(gè)主要特征是封裝繼承多態(tài)。
面向?qū)ο?/b>
面向?qū)ο缶幊痰娜Q是Object Oriented Programming,簡(jiǎn)稱OOP,面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)世界模型的一種編程模式。
面向?qū)ο缶幊炭梢钥醋鍪鞘褂靡幌盗袑?duì)象相互協(xié)作的軟件設(shè)計(jì),面向?qū)ο蟪绦蛟O(shè)計(jì)的目的是在編程中促進(jìn)更好的靈活性和可維護(hù)性。憑借其對(duì)模塊化的重視,面向?qū)ο蟮拇a開(kāi)發(fā)更簡(jiǎn)單,更容易理解。
面向?qū)ο缶幊痰娜齻€(gè)主要特征是:1.封裝 2.繼承 3.多態(tài)。
所有程序是由一定的屬性和行為對(duì)象組成的,不同的對(duì)象的訪問(wèn)通過(guò)函數(shù)調(diào)用來(lái)完成,對(duì)象間所有的交流都是通過(guò)方法調(diào)用,通過(guò)對(duì)封裝對(duì)象數(shù)據(jù),提高復(fù)用率。
JavaScript是一種基于原型的面向?qū)ο笳Z(yǔ)言,而不是基于類,正是由于這一根本的區(qū)別,其如何創(chuàng)建對(duì)象的層級(jí)結(jié)構(gòu)以及對(duì)象的屬性與屬性值是如何繼承的并不是那么清晰。
基于原型的語(yǔ)言并不存在這種區(qū)別:它只有對(duì)象。基于原型的語(yǔ)言具有所謂原型對(duì)象的概念。原型對(duì)象可以作為一個(gè)模板,新對(duì)象可以從中獲得原始的屬性。任何對(duì)象都可以指定其自身的屬性,既可以是創(chuàng)建時(shí)也可以在運(yùn)行時(shí)創(chuàng)建,而且,任何對(duì)象都可以作為另一個(gè)對(duì)象的原型,從而允許后者共享前者的屬性。
封裝就是按照要求使用并得到對(duì)應(yīng)的結(jié)果,而不需要知道其真實(shí)的執(zhí)行原理是怎么樣的。
封裝主要用于闡述對(duì)象中所包含(或封裝)的內(nèi)容,它們通常由兩部分組成:
1.相關(guān)的數(shù)據(jù)(用于存儲(chǔ)屬性)
2.基于這些數(shù)據(jù)所能做的事情
繼承通常是指類與類之間的關(guān)系,如果兩個(gè)類都有相同的屬性和方法,那么可以讓一個(gè)類繼承于另一個(gè)類,這樣就不需要在前者再次定義同樣的屬性或方法。
創(chuàng)建一個(gè)或多個(gè)類的專門(mén)版本類方式稱為繼承(JavaScript只支持單繼承)。創(chuàng)建的專門(mén)版本的類通常叫做子類,另外的類通常叫做父類。
在JavaScript中,繼承通過(guò)賦予子類一個(gè)父類的實(shí)例并專門(mén)化子類來(lái)實(shí)現(xiàn)。
不同的對(duì)象可以定義具有相同名稱的方法,方法是作用于所在的對(duì)象中。這種不同對(duì)象通過(guò)相同方法的調(diào)用實(shí)現(xiàn)各自行為的能力,被稱之為多態(tài)。
例如A對(duì)象具有sayMe()方法,B對(duì)象繼承與A對(duì)象,那B對(duì)象中也具有sayMe()方法。當(dāng)調(diào)用sayMe()方法時(shí),并不知道該方法是A對(duì)象還是B對(duì)象。但這并不影響代碼的正常工作。
構(gòu)造函數(shù)又稱為構(gòu)造器或?qū)ο竽0澹菍?duì)象中的一個(gè)方法,在實(shí)例化時(shí)構(gòu)造器被調(diào)用。在JavaScript中函數(shù)就可以作為構(gòu)造器使用,因此不需要特別定義一個(gè)構(gòu)造器方法。
//這里的Fun()并不是作為函數(shù),而是構(gòu)造函數(shù) function Fun(){ console.log("這是一個(gè)構(gòu)造函數(shù)"); } //創(chuàng)建fn對(duì)象需要使用new關(guān)鍵字 var fn=new Fun();
構(gòu)造函數(shù)的屬性
構(gòu)造函數(shù)的屬性實(shí)際上就是對(duì)象的變量。一個(gè)對(duì)象可以包含多個(gè)屬性,定義構(gòu)造函數(shù)的屬性時(shí)使用this關(guān)鍵字。
function Fun(firstName){ this.firstName=firstName; console.log("這是一個(gè)構(gòu)造函數(shù)"); } var fn=new Fun("張三"); console.log("這個(gè)是"+fn.firstName);
構(gòu)造函數(shù)的方法
構(gòu)造函數(shù)的方法很想構(gòu)造函數(shù)的屬性,不同的是方法是一個(gè)函數(shù)(或者像函數(shù)一樣被定義)。定義構(gòu)造函數(shù)的方法時(shí)使用this關(guān)鍵字。
var Fun=function(name){ this.name=name; this.sayMe=function(){ console.log("hello"+this.name); } } var fn=new Fun("張三"); fn.sayMe();this關(guān)鍵字
JavaScript有一套完全不同于其他語(yǔ)言對(duì)this處理機(jī)制,this關(guān)鍵字本身沒(méi)有任何含義,在如下幾種不同的情況下,this指向的各不相同
全局范圍內(nèi):this關(guān)鍵字指向全局對(duì)象
this.num=100; consolo.log(a);
構(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; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108157.html
摘要:中的和是一門(mén)很靈活的語(yǔ)言,尤其是。即然是面向?qū)ο蟮木幊陶Z(yǔ)言,那也是不可或缺的。在中,永遠(yuǎn)指向的是他的調(diào)用者。定義是存在于實(shí)例化后對(duì)象的一個(gè)屬性,并且指向原對(duì)象的屬性。我們?cè)跀U(kuò)展的時(shí)候,同時(shí)父類也會(huì)有對(duì)應(yīng)的方法,這很顯然是一個(gè)很?chē)?yán)重的問(wèn)題。 javascript中的this和new javascript是一門(mén)很靈活的語(yǔ)言,尤其是function。他即可以以面向過(guò)程的方式來(lái)用,比如: f...
摘要:會(huì)造成內(nèi)存浪費(fèi)的問(wèn)題構(gòu)造函數(shù)繼承聲明父類聲明子類生成實(shí)例組合式繼承組合式繼承是汲取了兩者的優(yōu)點(diǎn),既避免了內(nèi)存浪費(fèi),又使得每個(gè)實(shí)例化的子類互不影響。 寫(xiě)在前面 既然是淺談,就不會(huì)從原理上深度分析,只是幫助我們更好地理解... 面向?qū)ο笈c面向過(guò)程 面向?qū)ο蠛兔嫦蜻^(guò)程是兩種不同的編程思想,剛開(kāi)始接觸編程的時(shí)候,我們大都是從面向過(guò)程起步的,畢竟像我一樣,大家接觸的第一門(mén)計(jì)算機(jī)語(yǔ)言大概率都是C語(yǔ)...
摘要:工廠模式優(yōu)點(diǎn)集中實(shí)例化,可以傳參等缺點(diǎn)分不清屬于哪個(gè)對(duì)象我們先來(lái)談?wù)剝?yōu)點(diǎn),看例子集中實(shí)例化返回實(shí)例化對(duì)象返回返回不難看出,工廠模式比上面的例子減少了很多代碼。 ECMAscript開(kāi)發(fā)的兩種模式:1.過(guò)程化 2.OOP(面向?qū)ο? 面向?qū)ο蟮恼Z(yǔ)言有一個(gè)標(biāo)志,那就是類的概念,而通過(guò)類可以創(chuàng)建任意多個(gè)具有相同屬性的方法的對(duì)象。但是ECMAscript中沒(méi)有類的概念! 又談作用域 首先...
摘要:不必在構(gòu)造函數(shù)中定義對(duì)象實(shí)例的信息。其次,按照一切事物皆對(duì)象的這餓極本的面向?qū)ο蟮姆▌t來(lái)說(shuō),類本身并不是一個(gè)對(duì)象,然而原型方式的構(gòu)造函數(shù)和原型本身也是個(gè)對(duì)象。第二個(gè)問(wèn)題就是在創(chuàng)建子類型的實(shí)例時(shí),不能向超類型的構(gòu)造函數(shù)中傳遞參數(shù)。 前言 對(duì)象(Object)應(yīng)該算是js中最為重要的部分,也是js中非常難懂晦澀的一部分。更是面試以及框架設(shè)計(jì)中各出沒(méi)。寫(xiě)這篇文章,主要參考與JavaScrip...
摘要:數(shù)組的構(gòu)造函數(shù)是原型鏈的指向與其他除以外的構(gòu)造函數(shù)相同,的也指向頂級(jí)原型對(duì)象,每一個(gè)數(shù)組都是的實(shí)例,都指向。實(shí)例對(duì)象查找構(gòu)造函數(shù)原型對(duì)象的方法一般會(huì)把對(duì)象共有的屬性和方法都放在構(gòu)造函數(shù)的原型對(duì)象上。 showImg(https://segmentfault.com/img/remote/1460000018998704?w=900&h=506); 閱讀原文 概述 在 JavaScr...
閱讀 2622·2021-11-24 09:38
閱讀 2630·2019-08-30 15:54
閱讀 958·2019-08-30 15:52
閱讀 1943·2019-08-30 15:44
閱讀 2740·2019-08-30 13:48
閱讀 805·2019-08-29 16:21
閱讀 1031·2019-08-29 14:03
閱讀 2243·2019-08-28 18:15