欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ES6新特性之類(Class)和繼承(Extends)相關(guān)概念與用法分析

 更新時間:2017年05月24日 14:08:40   作者:我的老婆是校花  
這篇文章主要介紹了ES6新特性之類(Class)和繼承(Extends)相關(guān)概念與用法,結(jié)合實例形式較為詳細(xì)的分析了ES6中類(Class)和繼承(Extends)的基本概念、語法、使用方法與注意事項,需要的朋友可以參考下

本文實例講述了ES6新特性之類(Class)和繼承(Extends)相關(guān)概念與用法。分享給大家供大家參考,具體如下:

一、類(Class)

1.基本語法

JavaScript語言的傳統(tǒng)方法是通過構(gòu)造函數(shù),定義并生成新對象。下面是一個例子

function Point(x, y) {
  this.x = x;
  this.y = y;
}
Point.prototype.toString = function () {
  return '(' + this.x + ', ' + this.y + ')';
};
var p = new Point(1, 2);

ES6提供了更接近傳統(tǒng)語言的寫法,引入了Class(類)這個概念,作為對象的模板。通過class關(guān)鍵字,可以定義類?;旧?,ES6的class可以看作只是一個語法糖,它的絕大部分功能,ES5都可以做到,新的class寫法只是讓對象原型的寫法更加清晰、更像面向?qū)ο缶幊痰恼Z法而已。上面的代碼用ES6的“類”改寫,就是下面這樣。

//定義類
class Point {
  constructor(x, y) {  //constructor 構(gòu)造方法
    this.x = x;
    this.y = y;
  }
  toString() {
    return '(' + this.x + ', ' + this.y + ')';
  }
}
var p = new Point(1, 2);

構(gòu)造函數(shù)的prototype屬性,在ES6的“類”上面繼續(xù)存在。事實上,類的所有方法都還是定義在類的prototype屬性上面。

2.constructor方法

constructor方法是類的默認(rèn)方法,通過new命令生成對象實例時,自動調(diào)用該方法。一個類必須有constructor方法,如果沒有顯式定義,一個空的constructor方法會被默認(rèn)添加。

二、繼承(Extends)

Class之間可以通過extends關(guān)鍵字實現(xiàn)繼承,這比ES5的通過修改原型鏈實現(xiàn)繼承,要清晰和方便很多。

class ColorPoint extends Point {
  constructor(x, y, color) {
    super(x, y); // 調(diào)用父類的constructor(x, y)
    this.color = color;
  }
  toString() {
    return this.color + ' ' + super.toString(); // 調(diào)用父類的toString()
  }
}

上面代碼中,constructor方法和toString方法之中,都出現(xiàn)了super關(guān)鍵字,它在這里表示父類的構(gòu)造函數(shù),用來新建父類的this對象。

子類必須在constructor方法中調(diào)用super方法,否則新建實例時會報錯。這是因為子類沒有自己的this對象,而是繼承父類的this對象,然后對其進(jìn)行加工。如果不調(diào)用super方法,子類就得不到this對象。

三、原生構(gòu)造函數(shù)繼承

原生構(gòu)造函數(shù)是指語言內(nèi)置的構(gòu)造函數(shù),通常用來生成數(shù)據(jù)結(jié)構(gòu)。ECMAScript的原生構(gòu)造函數(shù)大致有下面這些。以前,這些原生構(gòu)造函數(shù)是無法繼承的。

Boolean()
Number()
String()
Array()
Date()
Function()
RegExp()
Error()
Object()

ES6允許繼承原生構(gòu)造函數(shù)定義子類,因為ES6是先新建父類的實例對象this,然后再用子類的構(gòu)造函數(shù)修飾this,使得父類的所有行為都可以繼承。下面是一個繼承Array的例子。

class MyArray extends Array {
  constructor(...args) {
    super(...args);
  }
}
var arr = new MyArray();
arr[0] = 12;
arr.length // 1
arr.length = 0;
arr[0] // undefined

上面代碼定義了一個MyArray類,繼承了Array構(gòu)造函數(shù),因此就可以從MyArray生成數(shù)組的實例。這意味著,ES6可以自定義原生數(shù)據(jù)結(jié)構(gòu)(比如Array、String等)的子類,這是ES5無法做到的。

四、Class的Generator方法

如果某個方法之前加上星號(*),就表示該方法是一個Generator函數(shù)。

class Foo {
  constructor(...args) {
    this.args = args;
  }
  * [Symbol.iterator]() {
    for (let arg of this.args) {
      yield arg;
    }
  }
}
for (let x of new Foo('hello', 'world')) {
  console.log(x);
}
// hello
// world

上面代碼中,F(xiàn)oo類的Symbol.iterator方法前有一個星號,表示該方法是一個Generator函數(shù)。Symbol.iterator方法返回一個Foo類的默認(rèn)遍歷器,for...of循環(huán)會自動調(diào)用這個遍歷器。

五、Class的靜態(tài)方法

類相當(dāng)于實例的原型,所有在類中定義的方法,都會被實例繼承。如果在一個方法前,加上static關(guān)鍵字,就表示該方法不會被實例繼承,而是直接通過類來調(diào)用,這就稱為“靜態(tài)方法”。

class Foo {
  static classMethod() {
    return 'hello';
  }
}
Foo.classMethod() // 'hello'
var foo = new Foo();
foo.classMethod()
// TypeError: foo.classMethod is not a function

上面代碼中,F(xiàn)oo類的classMethod方法前有static關(guān)鍵字,表明該方法是一個靜態(tài)方法,可以直接在Foo類上調(diào)用(Foo.classMethod()),而不是在Foo類的實例上調(diào)用。如果在實例上調(diào)用靜態(tài)方法,會拋出一個錯誤,表示不存在該方法。

父類的靜態(tài)方法,可以被子類繼承。

class Foo {
  static classMethod() {
    return 'hello';
  }
}
class Bar extends Foo {
}
Bar.classMethod(); // 'hello'

上面代碼中,父類Foo有一個靜態(tài)方法,子類Bar可以調(diào)用這個方法。

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ECMAScript6(ES6)入門教程》、《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript字符與字符串操作技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript錯誤與調(diào)試技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

相關(guān)文章

  • 文字垂直滾動之javascript代碼

    文字垂直滾動之javascript代碼

    這篇文章主要應(yīng)用javascript代碼實現(xiàn)文字垂直滾動的效果,需要的朋友可以參考下
    2015-07-07
  • 讓JavaScript代碼更加精簡的方法技巧

    讓JavaScript代碼更加精簡的方法技巧

    這篇文章主要介紹了讓JavaScript代碼更加精簡的方法技巧,文章通過使用?JavaScript對象解構(gòu)來節(jié)省代碼,JavaScript?對象解構(gòu)賦值在項目開發(fā)中是一個常用的技能。下文實現(xiàn)過程需要的小伙伴可以參考一下
    2022-06-06
  • JavaScript開發(fā)的七個實用小技巧(很有用)

    JavaScript開發(fā)的七個實用小技巧(很有用)

    日常開發(fā)中,我們經(jīng)常需要編寫大量的js代碼,下面這篇文章主要給大家介紹了關(guān)于JavaScript開發(fā)的七個實用小技巧,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • 根據(jù)配置文件加載js依賴模塊

    根據(jù)配置文件加載js依賴模塊

    這篇文章主要介紹了根據(jù)配置文件加載js依賴模塊,解決方法是筆者自己的思路,拋磚引玉,需要的朋友可以參考下
    2014-12-12
  • 微信小程序?qū)崿F(xiàn)帶放大效果的輪播圖

    微信小程序?qū)崿F(xiàn)帶放大效果的輪播圖

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)帶放大效果的輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • JavaScript File分段上傳

    JavaScript File分段上傳

    這篇文章主要介紹了JavaScript File分段上傳的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • JS獲取img圖片原始尺寸高度與寬度的七種方式

    JS獲取img圖片原始尺寸高度與寬度的七種方式

    近期做項目由于每張圖片加載的時候比例大小都不一樣,加載圖片時大部分圖片會變形,導(dǎo)致圖片展示效果非常差,所以我們可以獲取圖片的原始寬高,然后以等比例展示,效果會非常好,這篇文章主要給大家介紹了關(guān)于JS獲取img圖片原始尺寸高度與寬度的七種方式,需要的朋友可以參考下
    2022-11-11
  • JS和JQuery實現(xiàn)雪花飄落效果

    JS和JQuery實現(xiàn)雪花飄落效果

    本文主要給大家講述了如何用JS和JQuery兩種方式實現(xiàn)雪花飄落的動畫效果,有需要的朋友收藏一下吧。
    2017-11-11
  • 小程序中實現(xiàn)獲取全部數(shù)據(jù)的圖文教程

    小程序中實現(xiàn)獲取全部數(shù)據(jù)的圖文教程

    最近在開發(fā)中遇到了一個需求,需要獲取小程序的全部數(shù)據(jù),所以這篇文章主要給大家介紹了關(guān)于小程序中實現(xiàn)獲取全部數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • script標(biāo)簽中的async和defer詳細(xì)說明與使用場景

    script標(biāo)簽中的async和defer詳細(xì)說明與使用場景

    這篇文章主要介紹了script標(biāo)簽中的async和defer詳細(xì)說明與使用場景,需要的朋友可以參考下
    2023-02-02

最新評論