摘要:什么是面向對象本文不在論述。接下來說一下面向對象的三大特征在當中的實現。封裝實現封裝實現就是是對象內部的變化對外界是透明的不可見。這種做法使對象之間低耦合便于維護升級團隊協作開發。。
概述
本來打算寫設計模式的,在談論js的設計模式之前先說一下js的面向對象,因為很多設計模式的實現都摻雜著面向對象的思想,所以先做一下前期鋪墊。
js我們都知道是一種動態類型腳本型語言,變量類型無法保證,所以我們可以嘗試調用任意對象的任意方法,不用考慮它原本是否被設計為擁有該方法。
什么是面向對象本文不在論述。接下來說一下面向對象的三大特征在js當中的實現。
封裝這個特性在設計一個框架時需要認真考慮的。封裝的目的是將信息隱藏,其主要可分為以下幾類
數據封裝
在一些靜態類型的語言如java中,本身語法就提供了這些功能。js當中只能依靠變量的作用域來實現封裝的特性,并且只能模擬出public和private兩種特性。
/** - 利用函數創建的作用域達到數據封裝的目的。 - @type {{getName, setName}} */ var obj=(function () { var _name="gcy"; return { getName:function () { return _name; }, setName:function (val) { _name=val; } }; })(); obj._name; //undefined obj.getName(); //gcy
封裝實現
封裝實現就是是對象內部的變化對外界是透明的,不可見。這種做法使對象之間低耦合,便于維護升級,團隊協作開發。
$(selector).each(function(index,element))。就比如這個each函數,我們不用關心內部實現,只要提供的功能正確就行。我們關注的只是接口調用形式。
繼承在靜態語言中,例如java有關鍵字,雖然在es6中也有extend以及class,但其本質仍實現仍是基于原型機制。
/** * 簡單的es5原型繼承 * @constructor */ var A=function () { } A.prototype={name:"gcy"}; var B=function () { }; B.prototype=new A(); var b=new B(); console.log(b.name); /** * e6繼承實現demo */ class People{ constructor(name){ this.name=name; } getName(){ return this.name; } } class Black extends People{ constructor(name){ super(name); } speak(){ return " i am black"; } } var peo=new Black("gcy"); console.log(peo.getName()+" says "+peo.speak());
其實原型繼承方式寫法很多。我認為還是理解原型鏈機制比較重要,關鍵就是理解prototype和__proto__.
多態多態其實就是把做的內容和誰去做分開。在java中我們可以通過向上轉型,也就是面向接口編程。因為js是動態語言,多態性本身就有。
下面這個例子就說明了,一個動物能否實現叫聲,只取決于makeSound,不針對某種類型的對象。
/** * 多態的實現案例 * @param animal */ var makeSound=function (animal) { animal.sound(); } var Duck=function () { } var Dog=function () { } Duck.prototype.sound=function () { console.log("嘎嘎嘎") } Dog.prototype.sound=function () { console.log("旺旺旺") } makeSound(new Duck()); makeSound(new Dog());
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/81489.html
摘要:面向對象編程思想面向對象,簡單來說就是由動作的執行者變為動作的操控者。面向對象是相對于面向過程的。面向對象三大特征面向對象有三大特征,即封裝繼承和多態。接口和抽象類接口接口名方法方法,默認修飾符為,不能用其他修飾符修飾接口。 面向對象編程思想 面向對象,簡單來說就是由動作的執行者變為動作的操控者。結合具體例子來說就是使用某個人或者工具所具有的功能而不用去管功能的具體實現方式。例如現實中...
摘要:面向對象的三大特征封裝繼承多態。以本文為例,類中的變量為私有變量,只能通過創建對象此時構造方法自動調用來賦值。 java面向對象的三大特征:封裝、繼承、多態。 以本文為例,User類中的變量為私有變量,只能通過創建對象(此時構造方法自動調用)來賦值。外界只能通過公有方法api()來訪問User類。 Admin類繼承了User類,調用了其構造方法,還重寫了method_1方法,增加了...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
閱讀 378·2023-04-25 16:38
閱讀 1495·2021-09-26 09:46
閱讀 3340·2021-09-08 09:35
閱讀 2788·2019-08-30 12:54
閱讀 3260·2019-08-29 17:06
閱讀 1027·2019-08-29 14:06
閱讀 3354·2019-08-29 13:00
閱讀 3473·2019-08-28 17:53