摘要:面向?qū)ο缶幊痰膬?yōu)勢繼承多態(tài)封裝繼承獲取父類的全部數(shù)據(jù)和功能,實現(xiàn)的是復制。多態(tài)根據(jù)實現(xiàn)方法的對象,相同方法名具有不同的行為。封裝聚合對象數(shù)據(jù)和功能,以及限制它們和外界的聯(lián)系訪問權(quán)限。
面向?qū)ο缶幊痰母拍詈驮?/b> 1、面向?qū)ο缶幊淌鞘裁?/b>
它是用抽象的方式創(chuàng)建基于現(xiàn)實世界模型的編程模式(將數(shù)據(jù)和程序指令組合到對象中)2、面向?qū)ο缶幊痰哪康?/b>
在編程中促進更好的靈活性和可維護性,在大型軟件工程中廣為流行。3、面向?qū)ο缶幊痰膬?yōu)勢(繼承、多態(tài)、封裝)
繼承:獲取父類的全部(數(shù)據(jù)和功能),實現(xiàn)的是復制。JS中如何實現(xiàn)面向?qū)ο缶幊蹋▍⒖迹?/b> 1、原型鏈式繼承
多態(tài):根據(jù)實現(xiàn)方法的對象,相同方法名具有不同的行為。
封裝:聚合對象數(shù)據(jù)和功能,以及限制它們和外界的聯(lián)系(訪問權(quán)限)。
function Person() { this.name = "per" this.obj = { name: "" } } Person.prototype.getName = function() { return this.obj.name } Person.prototype.setName = function(name) { this.name = name // 引用類型的賦值會同步給所有子類 this.obj.name = name } function Student() { } Student.prototype = new Person() const stu1 = new Student() const stu2 = new Student() stu1.setName("stu") stu1.getName() stu2.getName()
缺點:引用類型被修改時會同步給所有子類2、構(gòu)造函數(shù)繼承
function Person() { this.obj = { name: "a" } this.setName = name => { this.obj.name = name } this.getName = () => { return this.obj.name } } function Student() { Person.call(this) } const stu1 = new Student() const stu2 = new Student() stu1.setName("stu") stu1.getName() stu2.getName()
缺點:父類的函數(shù)在子類下面是不共享的,相當于動態(tài)的復制了一份代碼3、組合繼承
function Person() { this.obj = { name: "a" } } Person.prototype.getName = function() { return this.obj.name } Person.prototype.setName = function(name) { this.name = name // 引用類型的賦值會同步給所有子類 this.obj.name = name } function Student() { // 繼承屬性 Person.call(this) } // 繼承方法 Student.prototype = new Person()
缺點:父類內(nèi)的屬性復制執(zhí)行了兩遍4、寄生組合式繼承
function Person() { this.obj = { name: "a" } } Person.prototype.getName = function() { return this.obj.name } Person.prototype.setName = function(name) { this.name = name // 引用類型的賦值會同步給所有子類 this.obj.name = name } function Student() { // 繼承屬性 Person.call(this) } // 這里實現(xiàn)方法的繼承 function inherit(sub, parent) { sub.prototype = Object.create(parent.prototype) sub.prototype.constructor = sub } inherit(Student, Person)
這里解決了組合式繼承的父類代碼二次執(zhí)行問題5、class實現(xiàn)繼承(參考)
class Person { constructor(){ this.obj = { name: "a" } } get name() { return this.obj.name } set name(name) { this.obj.name = name } } class Student extends Person { constructor() { super() } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/52884.html
摘要:面向?qū)ο缶幊痰膬?yōu)勢繼承多態(tài)封裝繼承獲取父類的全部數(shù)據(jù)和功能,實現(xiàn)的是復制。多態(tài)根據(jù)實現(xiàn)方法的對象,相同方法名具有不同的行為。封裝聚合對象數(shù)據(jù)和功能,以及限制它們和外界的聯(lián)系訪問權(quán)限。 面向?qū)ο缶幊痰母拍詈驮?1、面向?qū)ο缶幊淌鞘裁?它是用抽象的方式創(chuàng)建基于現(xiàn)實世界模型的編程模式(將數(shù)據(jù)和程序指令組合到對象中) 2、面向?qū)ο缶幊痰哪康?在編程中促進更好的靈活性和可維護性,在大型軟件工程...
摘要:設(shè)計模式是以面向?qū)ο缶幊虨榛A(chǔ)的,的面向?qū)ο缶幊毯蛡鹘y(tǒng)的的面向?qū)ο缶幊逃行┎顒e,這讓我一開始接觸的時候感到十分痛苦,但是這只能靠自己慢慢積累慢慢思考。想繼續(xù)了解設(shè)計模式必須要先搞懂面向?qū)ο缶幊蹋駝t只會讓你自己更痛苦。 JavaScript 中的構(gòu)造函數(shù) 學習總結(jié)。知識只有分享才有存在的意義。 是時候替換你的 for 循環(huán)大法了~ 《小分享》JavaScript中數(shù)組的那些迭代方法~ ...
摘要:所以讓我們趕緊切入正題,一起來看看關(guān)于腳本的面向?qū)ο缶幊獭K韵旅孀屛覀冇眠@些特性重新寫一下上面實現(xiàn)的函數(shù),看一下更原汁原味的面向?qū)ο缶幊獭? 今天懷著忐忑的心情寫下這篇文章,因為這畢竟是我第一篇真正意義上的技術(shù)文章,鞏固知識的同時,希望可以給閱讀的人帶來收獲,就很滿足了。所以讓我們趕緊切入正題,一起來看看關(guān)于Java腳本的面向?qū)ο缶幊獭?showImg(https://segmentf...
摘要:前面幾篇文章,我跟大家分享了的一些基礎(chǔ)知識,這篇文章,將會進入第一個實戰(zhàn)環(huán)節(jié)利用前面幾章的所涉及到的知識,封裝一個拖拽對象。不封裝對象直接實現(xiàn)利用原生封裝拖拽對象通過擴展來實現(xiàn)拖拽對象。 showImg(https://segmentfault.com/img/remote/1460000008699587); 前面幾篇文章,我跟大家分享了JavaScript的一些基礎(chǔ)知識,這篇文章,...
摘要:并嘗試用為什么你統(tǒng)計的方式是錯的掘金翻譯自工程師的文章。正如你期望的,文中的前端開發(fā)單一職責原則前端掘金單一職責原則又稱單一功能原則,面向?qū)ο笪鍌€基本原則之一。 單頁式應(yīng)用性能優(yōu)化 - 首屏數(shù)據(jù)漸進式預加載 - 前端 - 掘金前言 針對首頁和部分頁面打開速度慢的問題,我們開始對單頁式應(yīng)用性能進行優(yōu)化。本文介紹其中一個方案:基于 HTTP Chunk 的首屏數(shù)據(jù)漸進式預加載方案,該方案總...
閱讀 2406·2021-11-18 10:02
閱讀 1922·2021-10-13 09:40
閱讀 2999·2021-09-07 10:07
閱讀 2106·2021-09-04 16:48
閱讀 1005·2019-08-30 13:18
閱讀 2452·2019-08-29 14:03
閱讀 2922·2019-08-29 12:54
閱讀 3155·2019-08-26 11:41