国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

面向?qū)ο蟮腏avaScript(如何一步步成為js高手)

peixn / 2412人閱讀

摘要:雖然,也是面向疾苦的語言,但是,它和靜態(tài)類型語言的面向接口編程不一而足。對象對他自己的行為負責(zé),其他對象不關(guān)心它的內(nèi)部實現(xiàn)。

‘工欲善其事,必先利其器’,在深入學(xué)習(xí)JavaScript之前,我認為我們很有必要了解以下,JavaScript這門面向?qū)ο蟮膭討B(tài)語言到底是一門什么樣的語言。

JavaScript vs 其他面向?qū)ο笳Z言

它沒有使用像Java等傳統(tǒng)的面向?qū)ο笳Z言的類式繼承,而是通過原型委托的方式來實現(xiàn)對象間的繼承;

它沒有在語言層面提供對抽象類和接口的支持。

動態(tài)類型語言(它可以讓開發(fā)者將更多的精力放在業(yè)務(wù)邏輯上,代碼量更少;但它由于無法確定變量的類型,從而使程序可能發(fā)生一些與類型相關(guān)的錯誤)

動態(tài)類型語言對變量類型的寬容,給實際編碼帶來了很大的靈活性。由于無需進行類型的 檢測,我們可以嘗試調(diào)用任何對象的任何方法,而無需考慮它原本是否被設(shè)計為擁有該方法。

說到這里,我們就不得不提一下鴨子類型了。鴨子類型就說偶們只關(guān)注對象的行為,而不關(guān)注對象本身。

我們知道JavaScript是面向接口編程的語言,而非是面向?qū)崿F(xiàn)編程的。因此只要我們給對象添加pop,push方法,增添length屬性,那么這個對象就可以當(dāng)數(shù)組使用。

雖然,JavaScript也是面向疾苦的語言,但是,它和靜態(tài)類型語言的面向接口編程不一而足。

面向?qū)ο笳Z言的特性 多態(tài)

它將可變的部分與不可變的部分分離開來,吧可變的部分封裝起來(對象擁有相同的類型,都有相同的方法,接受相同的調(diào)用,卻返回不同的結(jié)果)

下面是一個對象的多態(tài):

var robotA = {
    dance: function() {
        console.log("robtA")
    }
};

var robotB = {
    dance: function() {
        console.log("robtB")
    }
}

var robotAction = function(robot) {
    if(robot.dance instanceof Function)
    robot.dance()
}

robotAction(robotA); // robtA
robotAction(robotB); // robtB

在JavaScript中函數(shù)被當(dāng)作第一等對象,也即是說函數(shù)本身也是對象,我們知道因為js是動態(tài)類型語言,所以函數(shù)不僅可以用來封裝行為,并且可以被當(dāng)作參數(shù)四處傳遞。當(dāng)我們對函數(shù)發(fā)起調(diào)用時,函數(shù)會返回不同的結(jié)果,這是多態(tài)的一種體現(xiàn),也是很多設(shè)計模式能被高階函數(shù)代替實現(xiàn)的原因。

封裝

封裝的目的是將信息隱藏。

封裝包括數(shù)據(jù)的封裝,實現(xiàn)的封裝和 變化的封裝。

1.數(shù)據(jù)的封裝

在js中我們只能依賴變量的作用域來進行封裝。可以實現(xiàn)全局作用域和局部作用域,在ES6之前我們使用函數(shù)來創(chuàng)建作用域,但在之后我們也可用let來創(chuàng)建作用域。

2.實現(xiàn)的封裝

實現(xiàn)的封裝使得對象的內(nèi)部變化對其他對象來說是不可見的。對象對他自己的行為負責(zé),其他對象不關(guān)心它的內(nèi)部實現(xiàn)。

封裝使得對象間的耦合變得松散,對象間只能通過暴露的API接口進行通信,只要我們不修改對象的對外接口,怎么樣修改對象都不會影響其他對象的功能。

3.變化的封裝

它就是將應(yīng)用中穩(wěn)定的部分和變化的部分隔離開來。如果我們將變化的部分封裝起來,那么在應(yīng)用的開發(fā)中我們將很容易的實現(xiàn)替換。這樣可以最大程度的保證應(yīng)用的穩(wěn)定性和可擴展性。

原型繼承和原型設(shè)計模式

前面我們已經(jīng)說過JavaScript沒有類式繼承,取而代之的是原型的繼承,這是語言的開發(fā)者根本就沒打算在js中引入類這個概念,而是引入了原型的概念。

在原型的編程思想中對象是通過復(fù)制而來的,克隆而來的對象與原對象看不出什么區(qū)別。

說到克隆對象,在ES5中有一個Object.create()方法來實現(xiàn)克隆,這個方法有兼容性問題,如果要在只支持ES3的瀏覽器中這就有一個問題。我們一般用下面的代碼來解決:

Object.create = Object.create || function(obj) {
    var F = function() {};
    F.prototype = obj;
    return new F()
}

在js這種類型模糊的語言中,創(chuàng)建對象很容易,也不存在類型耦合的情況。

js中的對象的實現(xiàn)是通過js的原型系統(tǒng)來實現(xiàn)的,前面也說過在js中一切皆對象,所以,要想很好的掌握js就要認真研究一下它的原型。

根據(jù)JavaScript的設(shè)計者本意,除了undefined之外的所有數(shù)據(jù)都是對像,我們知道js中的對象都是通過原型克隆而來的的,而在js中對象為Object,所以數(shù)據(jù)都是通過Object.prototype而來的(Object對象克隆自Function)。示例代碼如下:

var animal = { name: "lzb" }; 
var person = function(){};
person.prototype = animal;
var lzb = new person();
console.log( lzb.name ); // lzb 

其實嚴格意義上來說實現(xiàn)對象的構(gòu)造器有原型,如果對象的請求無響應(yīng),對象把它的請求委托給它的構(gòu)造器的原型。

原型繼承有未來嗎

這個在網(wǎng)上說法不一,有的人認為原型繼承很爛,并且說既然人們總結(jié)出了JavaScript的設(shè)計模式,而模式的出現(xiàn)本身就意味著語言的不足。但是,有的人認為它在未來相當(dāng)長的一段時間還是有市場的,并且js本身就在自我矯正,用一些新的特性來代替設(shè)計模式,ES5中的Object.create()來代替原型模式克隆對象,而ES6中的class的引入也是這個原因,雖然其背后的實現(xiàn)還是原型來克隆對象,但它的出現(xiàn)的確解決了一定的問題。再加上現(xiàn)在開發(fā)人員對它的興趣大增,所以我認為原型繼承有未來。

好了,今天的基礎(chǔ)回顧就到這里,順便我們了解了以下原型設(shè)計模式,原型模式的地位很重要,它和js的原型繼承一脈相承。

后續(xù)文章更新文章請關(guān)注https://github.com/lvzhenbang/article

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/90619.html

相關(guān)文章

  • 設(shè)計模式(通往高手之路必備技能)

    摘要:設(shè)計模式的定義在面向?qū)ο筌浖O(shè)計過程中針對特定問題的簡潔而優(yōu)雅的解決方案。從前由于使用的局限性,和做的應(yīng)用相對簡單,不被重視,就更談不上設(shè)計模式的問題。 ‘從大處著眼,從小處著手’,以前對這句話一知半解,自從踏出校門走入社會,開始工作以來,有了越來越深的理解,偶有發(fā)現(xiàn)這句話用在程序開發(fā)中也有用,所以,近段時間開始嘗試著分析jQuery源碼,分析angularjs源碼,學(xué)習(xí)設(shè)計模式。 設(shè)...

    paraller 評論0 收藏0
  • 如何正確學(xué)習(xí)JavaScript

    摘要:然而,雖然先生對無所不知,被譽為世界的愛因斯坦,但他的語言精粹并不適合初學(xué)者學(xué)習(xí)。即便如此,在后面我還是會建議把當(dāng)做補充的學(xué)習(xí)資源。但目前為止,依然是學(xué)習(xí)編程的好幫手。周正則表達式,對象,事件,閱讀權(quán)威指南第,,,章。 既然你找到這篇文章來,說明你是真心想學(xué)好JavaScript的。你沒有想錯,當(dāng)今如果要開發(fā)現(xiàn)代網(wǎng)站或web應(yīng)用(包括互聯(lián)網(wǎng)創(chuàng)業(yè)),都要學(xué)會JavaScript。而面對泛...

    canger 評論0 收藏0
  • 寫給在迷茫中前行前端學(xué)習(xí)/工作者

    摘要:我從今年的月份開始在知乎上連續(xù)回答前端開發(fā)相關(guān)的問題,至今已有將近三個月,回顧寫過的一百多條回答,不少是給迷茫的前端工作者的建議。今天我把我的思考提煉整理成文,希望能給予在迷茫中前行中的前端學(xué)習(xí)工作者一些有用的建議。 本文首發(fā)于知乎專欄——前端指南作者:Mark MFS老師轉(zhuǎn)載請注明來源。 我從今年的2月份開始在知乎上連續(xù)回答前端開發(fā)相關(guān)的問題,至今已有將近三個月,回顧寫過的一百多條回...

    羅志環(huán) 評論0 收藏0
  • [js高手之路]搞清楚面向對象,必須要理解對象在創(chuàng)建過程中內(nèi)存表示

    摘要:面向?qū)ο缶幊谭绞剑瑢τ诔鯇W(xué)者來說,會比較難懂要學(xué)會面向?qū)ο笠约笆褂妹嫦驅(qū)ο缶幊蹋斫鈱ο蟮膭?chuàng)建在內(nèi)存中的表示,至關(guān)重要首先,我們來一段簡單的對象創(chuàng)建代碼衛(wèi)莊衛(wèi)莊上例,我們創(chuàng)建了兩個對象和如果有多個類似對象,我們可以通過函數(shù)封裝,這種函數(shù)封裝 javascript面向?qū)ο缶幊谭绞剑瑢τ诔鯇W(xué)者來說,會比較難懂. 要學(xué)會面向?qū)ο笠约笆褂妹嫦驅(qū)ο缶幊蹋斫鈱ο蟮膭?chuàng)建在內(nèi)存中的表示,至關(guān)重要. ...

    binta 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<