国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

詳解ECMAScript6入門--Class對(duì)象

2019-11-19 16:43:20
字體:
供稿:網(wǎng)友

面向?qū)ο蟮恼Z言有一個(gè)標(biāo)志,那就是他們都有類的概念,通過類可以創(chuàng)建任意多個(gè)具有相同屬性和方法的對(duì)象。

ECMAScript5中沒有類的概念,因此它的對(duì)象和基于類的語言中的對(duì)象有所不同。

Javascript生成對(duì)象的傳統(tǒng)方法是通過構(gòu)造函數(shù)來實(shí)現(xiàn)的

function Person(name, age){  this.name = name;  this.age = age;  this.sayHello = function(){    return "Hello "+ this.name;  }}var person = new Person("dahan",18);person.sayHello();//Hello dahan

上述這種方式因?yàn)楹蚃avascript中聲明方法的形式一樣,所以對(duì)象和方法的區(qū)分并不明顯,很容易造成混淆。

ES6引入了Class(類)的概念,我們通過ES6的語法進(jìn)行創(chuàng)建對(duì)象的時(shí)候,可以像Java語法一樣,使用關(guān)鍵字class,用來定義類。當(dāng)然,這種語法的功能,通過ES5也都可以實(shí)現(xiàn),它只是讓類的定義更加清晰,更容易理解。

//類的定義class Person {  //ES6中新型構(gòu)造器  constructor(name) {    this.name = name;  }  //實(shí)例方法  sayName() {    console.log("我的名字叫"+ this.name);  }}//類的繼承class Programmer extends Person {  constructor(name) {    //直接調(diào)用父類構(gòu)造器進(jìn)行初始化    super(name);  }  program() {    cosnole.log("這是我的地盤");  }}//運(yùn)行測(cè)試var person = new Person('lingxiao');var coder = new Programmer('coder');person.sayName();//我的名字叫l(wèi)ingxiaocoder.sayName();//我的名字叫codercoder.program();//這是我的地盤

下面來注意講述一下上述代碼中出現(xiàn)的語法。

constructor

constructor是類的默認(rèn)方法,就像Java中的main方法一樣,每個(gè)類都必須有constructor方法。

在通過new實(shí)例化對(duì)象的時(shí)候,就會(huì)自動(dòng)調(diào)用constructor方法,得到的也就是constructor返回的值。constructor默認(rèn)返回當(dāng)前類的實(shí)例對(duì)象(this),但是我們也可以指定另外一個(gè)對(duì)象,當(dāng)然,這樣就會(huì)導(dǎo)致實(shí)例化出來的對(duì)象,并不是當(dāng)前類的實(shí)例。

class Person {  constructor(){    var ob = new Object();    return Ob;  }  sayHello(){    return "Hello World"  }}var person = new Person();person.sayHello();//Uncaught TypeError: person.sayHello is not a function

我們?cè)趯?shí)例化對(duì)象的時(shí)候,ES6規(guī)定我使用new關(guān)鍵字,如果直接調(diào)用,會(huì)當(dāng)成函數(shù)來調(diào)用。

class Person {  constructor(name){    this.name = name;  }};var person = Person("dahan");//Uncaught TypeError: Class constructor Person4 cannot be invoked without 'new'

this

在最開始的代碼中,我們看到了this,this在類中指向的就是實(shí)例本身,但是如果我們?cè)陬惖姆椒ㄖ惺褂昧藅his,單獨(dú)調(diào)用此方法的時(shí)候,就會(huì)出現(xiàn)錯(cuò)誤。

class Person{  constructor(name){    this.name = name;  }  sayHello() {    return "Hello "+this.name  }}var person = new Person("dahan");var sayHello = person.sayHello;sayHello();//Uncaught TypeError: Cannot read property 'name' of undefined

針對(duì)這個(gè)我們可以很簡(jiǎn)單的在構(gòu)造方法中綁定this

class Person{  constructor(name){    this.name = name;    this.sayHello = this.sayHello.call(this);  }  sayHello() {    return "Hello "+this.name  }}

繼承extend

我們想要在一個(gè)類上擴(kuò)展一些屬性,但又不想修改原類,就用到了繼承。

//類的繼承class Programmer extends Person {  constructor(name,age) {    this.age = age;//報(bào)錯(cuò)    //直接調(diào)用父類構(gòu)造器進(jìn)行初始化    super(name);  }  program() {    cosnole.log("這是我的地盤");  }}

使用繼承的時(shí)候,需要用super關(guān)鍵字來調(diào)用父類,super(name)就呆逼啊調(diào)用父類的constructor方法。

另外,我們使用的繼承的時(shí)候,super關(guān)鍵字也幫我們改變了this的指向,所以我們必須要先調(diào)用super方法,然后才能使用this。ES6要求,子類的構(gòu)造函數(shù)必須執(zhí)行一次super函數(shù),否則就會(huì)報(bào)錯(cuò)。

最后

class關(guān)鍵字的出現(xiàn),也讓Javascript看上去更加像一個(gè)面向?qū)ο笳Z言,愿Javascript越變?cè)胶迷揭子谩?br />

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南郑县| 新民市| 威远县| 钟祥市| 延吉市| 昌吉市| 城步| 江孜县| 尼玛县| 马鞍山市| 大港区| 崇左市| 泸州市| 西贡区| 望谟县| 平南县| 武安市| 晋城| 呼和浩特市| 冷水江市| 新竹县| 铜川市| 广安市| 景德镇市| 安远县| 淮南市| 澳门| 高雄市| 新巴尔虎左旗| 营山县| 镇原县| 辽阳县| 赞皇县| 泉州市| 永丰县| 磐安县| 广西| 黄山市| 西安市| 德令哈市| 阿合奇县|