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

首頁 > 語言 > JavaScript > 正文

ES6 更易于繼承的類語法的使用

2024-05-06 15:42:33
字體:
來源:轉載
供稿:網友

和其它面向對象編程語言一樣,ES6 正式定義了 class 類以及 extend 繼承語法糖,并且支持靜態、派生、抽象、迭代、單例等,而且根據 ES6 的新特性衍生出很多有趣的用法。

一、類的基本定義

基本所有面向對象的語言都支持類的封裝與繼承,那什么是類?

類是面向對象程序設計的基礎,包含數據封裝、數據操作以及傳遞消息的函數。類的實例稱為對象。

ES5 之前通過函數來模擬類的實現如下:

// 構造函數function Person(name) { this.name = name;}// 原型上的方法Person.prototype.sayName = function(){ console.log(this.name);};// new 一個實例var friend = new Person("Jenny");friend.sayName(); // Jennyconsole.log(friend instanceof Person);  // trueconsole.log(friend instanceof Object);  // true

總結來說,定義一個類的思路如下:

1.需要構造函數封裝數據
2.在原型上添加方法操作數據,
3.通過New創建實例

ES6 使用class關鍵字定義一個類,這個類有特殊的方法名[[Construct]]定義構造函數,在 new 創建實例時調用的就是[[Construct]],示例如下:

/*ES6*/// 等價于 let Person = class {class Person { // 構造函數 constructor(name) {  this.name = name; } // 等價于Person.prototype.sayName sayName() {  console.log(this.name); }}console.log(typeof Person);  // functionconsole.log(typeof Person.prototype.sayName);  // functionlet friend = new Person("Jenny");friend.sayName(); // Jennyconsole.log(friend instanceof Person);  // trueconsole.log(friend instanceof Object);  // true

上面的例子中class定義的類與自定義的函數模擬類功能上貌似沒什么不同,但本質上還有很大差異的:

函數聲明可以被提升,但是class類聲明與let類似,不能被提升; 類聲明自動運行在嚴格模式下,“use strict”; 類中所有方法都是不可枚舉的,enumerable 為 false。

二、更靈活的類

類和函數一樣,是JavaScript的一等公民(可以傳入函數、從函數返回、賦值),并且注意到類與對象字面量還有更多相似之處,這些特點可以擴展出類更靈活的定義與使用。

2.1 擁有訪問器屬性

對象的屬性有數據屬性和訪問屬性,類中也可以通過get、set關鍵字定義訪問器屬性:

class Person { constructor(name) {  this.name = name; } get value () {  return this.name + this.age } set value (num) {  this.age = num }}let friend = new Person("Jenny");// 調用的是 setterfriend.value = 18// 調用的是 getterconsole.log(friend.value) // Jenny18

2.2 可計算的成員名稱

類似 ES6 對象字面量擴展的可計算屬性名稱,類也可以用[表達式]定義可計算成員名稱,包括類中的方法和訪問器屬性:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 汝阳县| 商水县| 汾西县| 探索| 遵化市| 慈溪市| 承德市| 宣威市| 霍林郭勒市| 濮阳县| 循化| 中方县| 大余县| 南江县| 建始县| 芦溪县| 启东市| 伊金霍洛旗| 孝感市| 平泉县| 瑞昌市| 翁源县| 嵊泗县| 海兴县| 海盐县| 那曲县| 习水县| 富川| 乐清市| 崇义县| 万宁市| 鄯善县| 巴林右旗| 神池县| 揭东县| 通辽市| 海原县| 搜索| 泗洪县| 米易县| 佛坪县|