JavaScript基礎(chǔ)⑤ES6中的面向?qū)ο?/h1>

接續(xù)上篇JavaScript基礎(chǔ)④基于原型的面向?qū)ο缶幊?/a>

前言

面向?qū)ο笳Z言的基本特征:封裝皮假,繼承怔接,多態(tài) 锐涯。 這是我們在學(xué)Java的時候犬辰,首先映入眼簾的一句話 嗦篱。封裝 - 顧名思義就是將一些東西(屬性,方法)藏起來 幌缝, 不讓外部調(diào)用的人知道 灸促, 防止出現(xiàn)使用不當(dāng) 。 繼承 - 萬事萬物皆為天地所化 涵卵, 同出一門而變化萬千 浴栽, 既有相同之處又有差異之所 。繼承就是將共有的特征特質(zhì)向下傳遞 轿偎, 父傳子典鸡,子傳孫 , 孫又傳孫 坏晦, 子子孫孫無窮盡也 萝玷。多態(tài) - 萬物終有始焉 , 而好事者歸為類 昆婿, 譬如:鳥類 球碉, 人類 , 然仓蛆,多態(tài)始于繼承 睁冬, 子繼承有父之功 , 而可完成父之功也 看疙。

在上篇文章中 豆拨, 我們大致了解了JavaScript基于引用的面向?qū)ο筇卣?, 但終歸寫起來比較麻煩 能庆, 在ES6標(biāo)準(zhǔn)中 施禾, 已經(jīng)可以使用class作為類的關(guān)鍵字了 , 有了常規(guī)的面向的的寫法了 相味, 但內(nèi)部實現(xiàn)原理差不多 拾积, 只是添加了class及一些面向?qū)ο蟮恼Z法糖 殉挽。使用的時候 , 需要考慮兼容性拓巧。

ES6面向?qū)ο?/h3>

ECMAScript是一種由Ecma國際通過ECMA-262標(biāo)準(zhǔn)化的腳本程序設(shè)計語言斯碌。這種語言在萬維網(wǎng)上應(yīng)用廣泛,它往往被稱為JavaScript或JScript肛度,但實際上后兩者是ECMA-262標(biāo)準(zhǔn)的實現(xiàn)和擴展傻唾。 -- 百度百科

基于原型的面向?qū)ο?/p>

// 基于原型 , 創(chuàng)建一個Person類
function Person() {
    // 類的屬性
    Person.prototype.name = "zeno";
    Person.prototype.age = 20;
    Person.prototype.job = "Software Engineer";
    // 類的方法
    Person.prototype.sayHello = function(){
                alert("Hello "+this.name);
            };
}

// 創(chuàng)建Person對象
var person = new Person();
alert(person.name); // out : zeno
person.sayHello(); // out : Hello zeno

基于原型的面向?qū)ο?承耿, 寫法上比較繁瑣 冠骄, 需要使用原型對象屬性 。

ES6 對象寫法

class Person {
    constructor() {
        var name ;
    }
    doSomthing() {
        console.log('es6面向?qū)ο?);
    }
}

var p = new Person();
p.doSomthing(); // out : es6面向?qū)ο?

ES6標(biāo)準(zhǔn)的面向?qū)ο笳Z法 加袋,比較像java的寫法 凛辣, 但又有些不同 , JavaScript中不能定義類屬性 职烧。

嘗試類屬性

class Person {
    var name ;
}  // out : es6.html:29 Uncaught SyntaxError: Unexpected identifier

在JavaScript中不支持這種寫法扁誓。

繼承 - extends

可以看出和Java的語法有點相像了 , 不過這種寫法好像很多語言都實現(xiàn)了 蚀之, 例如PHP

// 父類
class Person {
    constructor() {
        this.name = 'zeno';
    }
    doSomthing() {
        console.log('es6面向?qū)ο?);
    }
}

// 子類
class Human extends Person {
    constructor() {
        super();
        this.job = 'software enginner' ;
    }
}


var h = new Human();
console.log(h.name); // zeno
console.log(h.job); // software enginner
console.log(h.doSomthing()); // 會調(diào)用兩次 蝗敢,第一次es6面向?qū)ο?, 第二次undefined

調(diào)用console.log(h.doSomthing());會調(diào)用兩次 足删, 初步估計是兩個類寿谴,各實例化了一次 , 每個對象調(diào)用一次doSomthing() 失受, 父類輸出 讶泰, 子類因沒有這個方法 , 而產(chǎn)生了undefined 贱纠。但我在子類實現(xiàn)了doSomthing()方法 峻厚, 結(jié)果還是執(zhí)行了兩次 , 這讓我不明就里 谆焊, 暫且擱置 惠桃, 希望知道的有心人士解惑之 。

多態(tài)

JavaScript天生支持多態(tài) 辖试, 因為JavaScript是動態(tài)語言辜王,沒有類型的向上向下轉(zhuǎn)性 , 方便了很多 罐孝。

封裝

JavaScript在ES6中貌似支持封裝 呐馆, 但實驗了一下 , 并不可以 莲兢,沒有語法上的支持 汹来, 就目前來看 续膳, 這是JavaScript最弱的一部分了 。

不可行的封裝

class Dog {
    constructor() {
        this._name = 'lily';

         this.age = 10 ;
    }

    getDogName() {
        return this._name;
    }

    get Age() {
        return this.age ;
    }

}

var d = new Dog();
console.log(d._name); // out : lily 可以訪問到

JavaScript ES6中 收班, 默認(rèn)以下劃線開頭的屬性為私有屬性或方法 坟岔, 然而并沒有什么卵用 , 一樣可以訪問 摔桦。

結(jié)語

JavaScript在不斷的發(fā)展 社付, 尤其這幾年 , 發(fā)展尤其迅速 邻耕, 各種庫 鸥咖, 如雨后春筍般迸發(fā) , 并應(yīng)用于各個行業(yè)和領(lǐng)域 兄世,并一度向全棧發(fā)展 啼辣。

  • 序言:七十年代末,一起剝皮案震驚了整個濱河市碘饼,隨后出現(xiàn)的幾起案子熙兔,更是在濱河造成了極大的恐慌,老刑警劉巖艾恼,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異麸锉,居然都是意外死亡钠绍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門花沉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柳爽,“玉大人,你說我怎么就攤上這事碱屁×赘” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵娩脾,是天一觀的道長赵誓。 經(jīng)常有香客問我,道長柿赊,這世上最難降的妖魔是什么俩功? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮碰声,結(jié)果婚禮上诡蜓,老公的妹妹穿的比我還像新娘。我一直安慰自己胰挑,他們只是感情好蔓罚,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布椿肩。 她就那樣靜靜地躺著,像睡著了一般豺谈。 火紅的嫁衣襯著肌膚如雪覆旱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天核无,我揣著相機與錄音扣唱,去河邊找鬼。 笑死团南,一個胖子當(dāng)著我的面吹牛噪沙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吐根,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼正歼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拷橘?” 一聲冷哼從身側(cè)響起局义,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冗疮,沒想到半個月后萄唇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡术幔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年另萤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诅挑。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡四敞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拔妥,到底是詐尸還是另有隱情忿危,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布没龙,位于F島的核電站铺厨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏兜畸。R本人自食惡果不足惜努释,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咬摇。 院中可真熱鬧伐蒂,春花似錦、人聲如沸肛鹏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缕减,卻和暖如春雷客,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桥狡。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工搅裙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人裹芝。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓部逮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嫂易。 傳聞我的和親對象是個殘疾皇子兄朋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容