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