es6中的類和es5的類

典型的es6類:
類的成員: 構(gòu)造方法,屬性,方法,靜態(tài)方法等

class Parent {
  height = 20;
  constructor(name) {
    this.name = name;
  }

  static sayHello() {
    console.log('hello');
  }

  sayName() {
    console.log('my name is ' + this.name);
    return this.name;
  }
}
class Child extends Parent {
  constructor(name, age) {
    super(name);
    this.age = age;
  }

  sayAge() {
    console.log('my age is ' + this.age);
    return this.age;
  }
}

類的使用時(shí)new出來(lái)的,跟es5不一樣; 類的寫法跟es5也是不一樣,那么有如下問(wèn)題:

  1. es6這樣的寫法對(duì)應(yīng)于es5寫法,類定義哪些屬性和方法是對(duì)應(yīng)起來(lái)的
  2. 當(dāng)繼承發(fā)生的時(shí)候,過(guò)程是怎樣的

1. es6這樣的寫法對(duì)應(yīng)于es5寫法,類定義哪些屬性和方法是對(duì)應(yīng)起來(lái)的

es5類的定義

function ClassName () {
  this.x = 1;
  this.y = 2;
  this.sayHello = function () {
    console.log('hello');
  }
}
ClassName.prototype.sayHello = function () {
  console.log('hello');
}
var className = new ClassName();
className.sayHello();

es6類的定義

class ClassName {
  x = 1;
  y = 2;
  constructor () {}
  sayHello () {
    console.log('hello');
  }
}
es5對(duì)象:

定義在實(shí)例對(duì)象上的:
this.x
this.y
this.sayHello
定義在類的原型上的:
ClassName.prototype.sayHello


es6對(duì)象:

定義在實(shí)例對(duì)象上的:
x = 1;
y = 2;
定義在原型上的:
sayHello方法(非靜態(tài)方法)



另外,es6對(duì)象上的靜態(tài)方法(前綴是static),不在原型上, 不可被實(shí)例化對(duì)象調(diào)用,且不能被子類的實(shí)例化對(duì)象調(diào)用,但是可以被子類繼承,通過(guò)子類名調(diào)用.

2. 當(dāng)繼承發(fā)生的時(shí)候,過(guò)程是怎么樣的

es5的繼承

function Parent () {
  this.x = 1;
  this.y = 2;
}

function Child () {
  this.z = 3;
}

Child.prototype = new Parent();

var parent = new Parent();
var child = new Child();

es6的繼承

class Parent {
  height = 20;
  static width = 30;
  constructor(name) {
    this.name = name;
  }

  static sayHello() {
    console.log('hello');
  }

  sayName() {
    console.log('my name is ' + this.name);
    return this.name;
  }
}

class Child extends Parent {
  constructor(name, age) {
    super(name);
    this.age = age;
  }

  sayAge() {
    console.log('my age is ' + this.age);
    return this.age;
  }
}

let parent = new Parent('Parent');
let child = new Child('Child', 18);

下面將探索繼承發(fā)生了什么
es5的繼承中,只存在單個(gè)原型鏈;
es6的繼承中,同時(shí)存在兩條原型鏈;

es5的繼承如下:
在構(gòu)造函數(shù)這條原型鏈上是不存在的;
在實(shí)例上的原型鏈?zhǔn)谴嬖诘?

function Parent () {
  this.x = 1;
  this.y = 2;
}

function Child () {
  this.z = 3;
}

Child.prototype = new Parent();

var parent = new Parent();
var child = new Child();

// 在構(gòu)造函數(shù)這條原型鏈上是不存在的
console.log('Child.__proto__ === Parent', Child.__proto__ === Parent);

/**
在實(shí)例上的原型鏈存在
*/ 
// 子類實(shí)例繼承自子類原型
console.log('Child.__proto__ === Child.prototype', child.__proto__ === Child.prototype);
// 子類原型繼承自父類原型
console.log('Child.prototype.__proto__ === parent.prototype', Child.prototype.__proto__ === Parent.prototype);
// 父類實(shí)例繼承自父類原型
console.log('parent.__proto__ === Parent.prototype', parent.__proto__ === Parent.prototype);
// 子類實(shí)例繼承自父類實(shí)例(Child.prototype = new Parent();)
console.log('Child.prototype.__proto__ === parent.__proto__', Child.prototype.__proto__ === parent.__proto__);

es6的繼承,存在2條原型鏈

class Parent {
  height = 20;
  static width = 30;
  constructor(name) {
    this.name = name;
  }

  static sayHello() {
    console.log('hello');
  }

  sayName() {
    console.log('my name is ' + this.name);
    return this.name;
  }
}

class Child extends Parent {
  constructor(name, age) {
    super(name);
    this.age = age;
  }

  sayAge() {
    console.log('my age is ' + this.age);
    return this.age;
  }
}

let parent = new Parent('Parent');
let child = new Child('Child', 18);
// 構(gòu)造函數(shù)原型鏈
console.log('Child.__proto__ === Parent', Child.__proto__ === Parent);
console.log('Parent.__proto__ === Function.prototype', Parent.__proto__ === Function.prototype);
console.log('Function.prototype.__proto__ === Object.prototype', Function.prototype.__proto__ === Object.prototype);
console.log('Parent.__proto__ === Function.prototype', Object.prototype.__proto__ === null);

// 實(shí)例原型鏈
console.log('child.__proto__ === Child.prototype', child.__proto__ === Child.prototype);
console.log('Array.prototype.__proto__ === Object.prototype', Child.prototype.__proto__ === Parent.prototype);
console.log('Array.prototype.__proto__ === Object.prototype', Parent.prototype.__proto__ === Object.prototype);
console.log('Array.prototype.__proto__ === Object.prototype', Object.prototype.__proto__ === null);

最后附上一張圖:


751551798315_.pic_hd.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末放棒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子哨查,更是在濱河造成了極大的恐慌,老刑警劉巖寒亥,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異溉奕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)加勤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門同波,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)叠国,“玉大人,你說(shuō)我怎么就攤上這事粟焊≡┙疲” “怎么了项棠?”我有些...
    開(kāi)封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)香追。 經(jīng)常有香客問(wèn)我,道長(zhǎng)透典,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任掷匠,我火速辦了婚禮,結(jié)果婚禮上讹语,老公的妹妹穿的比我還像新娘。我一直安慰自己顽决,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布才菠。 她就那樣靜靜地躺著,像睡著了一般赋访。 火紅的嫁衣襯著肌膚如雪可都。 梳的紋絲不亂的頭發(fā)上蚓耽,一...
    開(kāi)封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音步悠,去河邊找鬼。 笑死鼎兽,一個(gè)胖子當(dāng)著我的面吹牛铣除,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鹦付,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼背苦!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起潘明,我...
    開(kāi)封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤钳降,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后腌巾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡澈蝙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了礁击。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哆窿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出厉斟,到底是詐尸還是另有隱情,我是刑警寧澤擦秽,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站感挥,受9級(jí)特大地震影響缩搅,放射性物質(zhì)發(fā)生泄漏链快。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一域蜗、第九天 我趴在偏房一處隱蔽的房頂上張望噪猾。 院中可真熱鬧,春花似錦袱蜡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)镜沽。三九已至,卻和暖如春缅茉,著一層夾襖步出監(jiān)牢的瞬間嘴脾,已是汗流浹背蔬墩。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拇颅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓樟插,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親岸夯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子麻献,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348