首頁 web前端 前端問答 ES6透過什麼定義類

ES6透過什麼定義類

Mar 09, 2022 pm 06:52 PM
class es6 類別

在ES6中,class(類別)作為物件的模板被引入,可以透過「class」關鍵字來定義類別。 class的本質是function,它可以看成一個語法糖,讓物件原型的寫法更加清晰、更像物件導向程式設計的語法。

ES6透過什麼定義類

本教學操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。

ES6 Class

在ES6中,class(類別)作為物件的模板被引入,可以透過「class」關鍵字來定義類。

class 的本質是 function。

基本上,ES6的class可以看成只是一個語法糖,它的絕大部分功能,ES5都可以做到,新的class寫法只是讓物件原型的寫法更加清晰、更像物件導向程式設計的語法而已。

基礎用法

類別定義

##類別表達式可以匿名或命名。

// 匿名类
let Example = class {
    constructor(a) {
        this.a = a;
    }
}
// 命名类
let Example = class Example {
    constructor(a) {
        this.a = a;
    }
}
登入後複製

類別宣告

class Example {
    constructor(a) {
        this.a = a;
    }
}
登入後複製

注意要點:不可重複宣告。

class Example{}
class Example{}
// Uncaught SyntaxError: Identifier 'Example' has already been 
// declared
 
let Example1 = class{}
class Example{}
// Uncaught SyntaxError: Identifier 'Example' has already been 
// declared
登入後複製

注意要點:

類別定義不會被提升,這意味著,必須在存取前對類別進行定義,否則就會報錯。

類別中方法不需要 function 關鍵字。

方法間不能加分號。

new Example(); 
class Example {}
登入後複製

類別的主體

#屬性

prototype

ES6 中,prototype 仍舊存在,雖然可以直接自類別中定義方法,但其實方法還是定義在prototype 上的。覆寫方法/ 初始化時新增方法

Example.prototype={
    //methods
}
登入後複製

新增方法

Object.assign(Example.prototype,{
    //methods
})
登入後複製

靜態屬性

靜態屬性:class 本身的屬性,即直接定義在類別內部的屬性( Class. propname ),不需要實例化。 ES6 中規定,Class 內部只有靜態方法,沒有靜態性質。

class Example {
// 新提案
    static a = 2;
}
// 目前可行写法
Example.b = 2;
登入後複製

公有屬性

class Example{}
Example.prototype.a = 2;
登入後複製

實例屬性

實例屬性:定義在實例物件( this )上的屬性。

class Example {
    a = 2;
    constructor () {
        console.log(this.a);
    }
}
登入後複製

name 屬性

傳回跟在 class 後的類別名稱(存在時)。

let Example=class Exam {
    constructor(a) {
        this.a = a;
    }
}
console.log(Example.name); // Exam
 
let Example=class {
    constructor(a) {
        this.a = a;
    }
}
console.log(Example.name); // Example
登入後複製

方法

constructor 方法

constructor 方法是類別的預設方法,在建立類別的實例化物件時被呼叫。

class Example{
    constructor(){
      console.log('我是constructor');
    }
}
new Example(); // 我是constructor
登入後複製

回傳物件

class Test {
    constructor(){
        // 默认返回实例对象 this
    }
}
console.log(new Test() instanceof Test); // true
 
class Example {
    constructor(){
        // 指定返回对象
        return new Test();
    }
}
console.log(new Example() instanceof Example); // false
登入後複製

靜態方法

class Example{
    static sum(a, b) {
        console.log(a+b);
    }
}
Example.sum(1, 2); // 3
登入後複製

原型方法

class Example {
    sum(a, b) {
        console.log(a + b);
    }
}
let exam = new Example();
exam.sum(1, 2); // 3
登入後複製

實例方法

class Example {
    constructor() {
        this.sum = (a, b) => {
            console.log(a + b);
        }
    }
}
登入後複製

#類的實例化

new

class 的實例化必須透過new 關鍵字。

class Example {}
 
let exam1 = Example(); 
// Class constructor Example cannot be invoked without 'new'
登入後複製

實例化物件

共享原型物件

class Example {
    constructor(a, b) {
        this.a = a;
        this.b = b;
        console.log('Example');
    }
    sum() {
        return this.a + this.b;
    }
}
let exam1 = new Example(2, 1);
let exam2 = new Example(3, 1);
 
// __proto__ 已废弃,不建议使用
// console.log(exam1.__proto__ == exam2.__proto__); 
 
console.log(Object.getPrototypeOf(exam1) === Object.getPrototypeOf(exam2));// true
 
Object.getPrototypeOf(exam1).sub = function() {
    return this.a - this.b;
}
console.log(exam1.sub()); // 1
console.log(exam2.sub()); // 2
登入後複製

【相關推薦:

javascript影片教學web前端

以上是ES6透過什麼定義類的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Python中的class類別和method方法的使用方法 Python中的class類別和method方法的使用方法 Apr 21, 2023 pm 02:28 PM

類別和方法的概念和實例類別(Class):用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所共有的屬性和方法。物件是類別的實例。方法:類別中定義的函數。類別的建構方法__init__():類別有一個名為init()的特殊方法(建構方法),該方法在類別實例化時會自動呼叫。實例變數:在類別的宣告中,屬性是用變數來表示的,這種變數就稱為實例變量,實例變數就是用self修飾的變數。實例化:建立一個類別的實例,類別的具體物件。繼承:即一個派生類別(derivedclass)繼承基底類別(baseclass)的

PHP報錯:無法重複聲明類,解決方法! PHP報錯:無法重複聲明類,解決方法! Aug 25, 2023 pm 04:13 PM

PHP報錯:無法重複聲明類,解決方法!對開發者而言,遇到問題是常有的事情。而在PHP開發中,常會遇到一個常見的錯誤:無法重複聲明類別。這個問題看似簡單,但如果不及時解決,會導致程式碼無法正確執行。本文將介紹這個問題的原因,並提供解決方法,以供參考。當我們在PHP程式碼中定義一個類別時,如果在同一個檔案或多個檔案中多次定義同一個類,就會出現無法重複聲明類別的錯誤。這是

PHP中的命名規格:如何使用駝峰命名法命名類別、方法和變量 PHP中的命名規格:如何使用駝峰命名法命名類別、方法和變量 Jul 30, 2023 pm 02:43 PM

PHP中的命名規範:如何使用駝峰命名法命名類別、方法和變數在PHP程式設計中,良好的命名規範是一種重要的編碼實踐。它可以提高程式碼的可讀性和可維護性,並且使團隊合作更加順暢。在本文中,我們將探討一個常見的命名規格:駝峰命名法,並提供一些範例來說明如何在PHP中使用它來命名類別、方法和變數。一、什麼是駝峰命名法?駝峰命名法是一種常用的命名約定,其中每個單字的首字母大寫,

使用jQuery替換元素的class名稱 使用jQuery替換元素的class名稱 Feb 24, 2024 pm 11:03 PM

jQuery是一種經典的JavaScript庫,被廣泛應用於網頁開發中,它簡化了在網頁上處理事件、操作DOM元素和執行動畫等操作。在使用jQuery時,常會遇到需要取代元素的class名稱的情況,本文將介紹一些實用的方法,以及具體的程式碼範例。 1.使用removeClass()和addClass()方法jQuery提供了removeClass()方法來刪除

PHP Class用法詳解:讓你的程式碼更清楚易讀 PHP Class用法詳解:讓你的程式碼更清楚易讀 Mar 10, 2024 pm 12:03 PM

在編寫PHP程式碼時,使用類別(Class)是一個非常常見的做法。透過使用類,我們可以將相關的功能和資料封裝在一個單獨的單元中,使程式碼更加清晰、易於閱讀和易於維護。本文將詳細介紹PHPClass的用法,並提供具體的程式碼範例,幫助讀者更好地理解如何在實際專案中應用類別來優化程式碼。 1.建立和使用類別在PHP中,可以使用關鍵字class來定義一個類,並在類別中定義屬性和方法。

PHP中的封裝技術及應用 PHP中的封裝技術及應用 Oct 12, 2023 pm 01:43 PM

PHP中的封裝技術及應用封裝是物件導向程式設計中的重要概念,它指的是將資料和資料的操作封裝在一起,以便提供對外部程式的統一存取介面。在PHP中,封裝可以透過存取控制修飾符和類別的定義來實現。本文將介紹PHP中的封裝技術及其應用場景,並提供一些具體的程式碼範例。一、封裝的存取控制修飾符在PHP中,封裝主要透過存取控制修飾符來實現。 PHP提供了三個存取控制修飾符,

Vue報錯:無法正確使用v-bind綁定class和style,怎麼解決? Vue報錯:無法正確使用v-bind綁定class和style,怎麼解決? Aug 26, 2023 pm 10:58 PM

Vue報錯:無法正確使用v-bind綁定class和style,怎麼解決?在Vue開發中,我們常常會用到v-bind指令來動態綁定class和style,但是有時候我們可能會遇到一些問題,如無法正確使用v-bind綁定class和style。在本篇文章中,我將為你解釋這個問題的原因,並提供解決方案。首先,讓我們先來了解v-bind指令。 v-bind用於將V

jquery怎麼判斷元素是否有class jquery怎麼判斷元素是否有class Mar 21, 2023 am 10:47 AM

jquery判斷元素是否有class的方法:1、透過「hasClass('classname')」方法判斷元素是否具有某個class;2、透過「is('.classname')」方法判斷元素是否具有某個class。

See all articles