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

首頁 > 開發 > JS > 正文

詳解ECMAScript6入門--Class對象

2024-05-06 16:36:49
字體:
來源:轉載
供稿:網友

面向對象的語言有一個標志,那就是他們都有類的概念,通過類可以創建任意多個具有相同屬性和方法的對象。

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

Javascript生成對象的傳統方法是通過構造函數來實現的

class="jb51code">
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

上述這種方式因為和Javascript中聲明方法的形式一樣,所以對象和方法的區分并不明顯,很容易造成混淆。

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

//類的定義class Person {  //ES6中新型構造器  constructor(name) {    this.name = name;  }  //實例方法  sayName() {    console.log("我的名字叫"+ this.name);  }}//類的繼承class Programmer extends Person {  constructor(name) {    //直接調用父類構造器進行初始化    super(name);  }  program() {    cosnole.log("這是我的地盤");  }}//運行測試var person = new Person('lingxiao');var coder = new Programmer('coder');person.sayName();//我的名字叫lingxiaocoder.sayName();//我的名字叫codercoder.program();//這是我的地盤

下面來注意講述一下上述代碼中出現的語法。

constructor

constructor是類的默認方法,就像Java中的main方法一樣,每個類都必須有constructor方法。

在通過new實例化對象的時候,就會自動調用constructor方法,得到的也就是constructor返回的值。constructor默認返回當前類的實例對象(this),但是我們也可以指定另外一個對象,當然,這樣就會導致實例化出來的對象,并不是當前類的實例。

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

我們在實例化對象的時候,ES6規定我使用new關鍵字,如果直接調用,會當成函數來調用。

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

this

在最開始的代碼中,我們看到了this,this在類中指向的就是實例本身,但是如果我們在類的方法中使用了this,單獨調用此方法的時候,就會出現錯誤。

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

針對這個我們可以很簡單的在構造方法中綁定this

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

繼承extend

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

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

使用繼承的時候,需要用super關鍵字來調用父類,super(name)就呆逼啊調用父類的constructor方法。

另外,我們使用的繼承的時候,super關鍵字也幫我們改變了this的指向,所以我們必須要先調用super方法,然后才能使用this。ES6要求,子類的構造函數必須執行一次super函數,否則就會報錯。

最后

class關鍵字的出現,也讓Javascript看上去更加像一個面向對象語言,愿Javascript越變越好越易用。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。您可能感興趣的文章:


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 民权县| 墨竹工卡县| 临澧县| 乌鲁木齐市| 调兵山市| 楚雄市| 尉犁县| 集贤县| 红安县| 图们市| 高阳县| 张掖市| 文成县| 洪雅县| 岫岩| 巴楚县| 恭城| 镇巴县| 正镶白旗| 曲周县| 绍兴市| 刚察县| 长武县| 柳江县| 定襄县| 左云县| 化隆| 莱西市| 墨玉县| 新密市| 波密县| 东明县| 阿拉尔市| 莆田市| 景洪市| 乡宁县| 大埔县| 克山县| 自贡市| 兴隆县| 宣威市|