詳解ECMAScript6入門--Class對(duì)象
面向?qū)ο蟮恼Z(yǔ)言有一個(gè)標(biāo)志,那就是他們都有類的概念,通過(guò)類可以創(chuàng)建任意多個(gè)具有相同屬性和方法的對(duì)象。
ECMAScript5中沒(méi)有類的概念,因此它的對(duì)象和基于類的語(yǔ)言中的對(duì)象有所不同。
Javascript生成對(duì)象的傳統(tǒng)方法是通過(guò)構(gòu)造函數(shù)來(lái)實(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(類)的概念,我們通過(guò)ES6的語(yǔ)法進(jìn)行創(chuàng)建對(duì)象的時(shí)候,可以像Java語(yǔ)法一樣,使用關(guān)鍵字class,用來(lái)定義類。當(dāng)然,這種語(yǔ)法的功能,通過(guò)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("這是我的地盤(pán)");
}
}
//運(yùn)行測(cè)試
var person = new Person('lingxiao');
var coder = new Programmer('coder');
person.sayName();
//我的名字叫l(wèi)ingxiao
coder.sayName();
//我的名字叫coder
coder.program();
//這是我的地盤(pán)
下面來(lái)注意講述一下上述代碼中出現(xiàn)的語(yǔ)法。
constructor
constructor是類的默認(rèn)方法,就像Java中的main方法一樣,每個(gè)類都必須有constructor方法。
在通過(guò)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í)例化出來(lái)的對(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ù)來(lái)調(diào)用。
class Person {
constructor(name){
this.name = name;
}
};
var person = Person("dahan");
//Uncaught TypeError: Class constructor Person4 cannot be invoked without 'new'this
在最開(kāi)始的代碼中,我們看到了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("這是我的地盤(pán)");
}
}使用繼承的時(shí)候,需要用super關(guān)鍵字來(lái)調(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(yǔ)言,愿Javascript越變?cè)胶迷揭子谩?/p>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
淺析如何在Bash中調(diào)用Node運(yùn)行JS文件進(jìn)行數(shù)據(jù)通信
這篇文章主要來(lái)和大家探討在 Bash 中調(diào)用 Node 運(yùn)行 JS 文件時(shí)如何進(jìn)行數(shù)據(jù)通信,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
小程序?qū)崿F(xiàn)倒計(jì)時(shí)組件的使用示例
倒計(jì)時(shí)是指從一個(gè)固定的時(shí)間開(kāi)始,向前推算一段時(shí)間,來(lái)計(jì)算目標(biāo)時(shí)間或剩余時(shí)間的過(guò)程,本文主要介紹了小程序?qū)崿F(xiàn)倒計(jì)時(shí)組件的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
js中AppendChild與insertBefore的用法詳細(xì)解析
這篇文章主要是對(duì)js中AppendChild與insertBefore的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-12-12
js調(diào)用后臺(tái)、后臺(tái)調(diào)用前臺(tái)等方法總結(jié)
這篇文章主要對(duì)js調(diào)用后臺(tái),后臺(tái)調(diào)用前臺(tái)等方法做個(gè)總結(jié),需要的朋友可以參考下2014-04-04
JS冷知識(shí)之不起眼但有用的String.raw方法
String.raw是JavaScript中模板字符串的一個(gè)標(biāo)簽函數(shù),它的作用是將模板字符串不轉(zhuǎn)義的原始字符串內(nèi)容返回,接下來(lái)通過(guò)本文給大家介紹JS冷知識(shí)之不起眼但有用的String.raw方法,需要的朋友可以參考下2022-06-06
js 判斷字符串中是否包含某個(gè)字符串的實(shí)現(xiàn)代碼
工作中經(jīng)常會(huì)使用到判斷一個(gè)字符串是否包含某一個(gè)字符串,因此總結(jié)一下幾個(gè)方法,需要的朋友可以參考下2023-03-03
探討JavaScript語(yǔ)句的執(zhí)行過(guò)程
本文給大家介紹JavaScript語(yǔ)句的執(zhí)行過(guò)程的相關(guān)知識(shí),對(duì)js語(yǔ)句執(zhí)行過(guò)程的相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-01-01
js神秘的電報(bào)密碼 哈弗曼編碼實(shí)現(xiàn)
這篇文章主要介紹了js神秘的電報(bào)密碼 哈弗曼編碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09

