国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ECMAScript 6+ 新特性 ( 二 )

這篇具有很好參考價值的文章主要介紹了ECMAScript 6+ 新特性 ( 二 )。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

2.12. class類

ES6 提供了更接近傳統(tǒng)語言的寫法,引入了 Class(類)這個概念,作為對象的模板。通過 class 關(guān)鍵字,可以定義類。

ES6 的 class 可以看作只是一個語法糖,它的絕大部分功能ES5 都可以做到,新的 class 寫法只是讓對象原型的寫法更加清晰、更像面向?qū)ο缶幊痰恼Z法而已。

// ES 5
// 人員 : 相當(dāng)于 構(gòu)造方法
function Person(name, sex){
    this.name = name;
    this.sex = sex;
}

//添加方法
Person.prototype.sayHi = function(){
    console.log("大家好!!");
}

//實例化對象
let wang = new Person('王小二', '男');
wang.sayHi();
console.log(wang);



// ES 6
//class
class Emp{
    //構(gòu)造方法 名字不能修改
    constructor(name, sex){
        this.name = name;
        this.sex = sex;
    }

    //方法必須使用該語法
    sayHi(){
        console.log("大家好!!");
    }
}

let li = new Emp("李小三", '女');
li.sayHi()
console.log(li);

2.12.1.set/get 方法

在name屬性之前添加了get和set關(guān)鍵字,這樣就創(chuàng)建了一個名為name的訪問器屬性。get方法用于獲取該屬性的值,set方法用于設(shè)置新的值。

需要注意的是,使用屬性訪問器時,實際的屬性名會在內(nèi)部使用一個帶下劃線的變量名來存儲。這是一種常見的命名約定,用于區(qū)分屬性訪問器和實際存儲屬性的變量。

 class Stu {
     constructor(name) {
         this._name = name;
     }

     get name() {
         console.log('讀取 name 屬性')
         return this._name;
     }

     set name(newName) {
         console.log('修改 name 屬性');
         this._name = newName;
     }
 }

const stu = new Stu('王小二');
console.log(stu.name); // 輸出 "王小二"

stu.name = '李小三';
console.log(stu.name); // 輸出 "李小三"

2.12.2.靜態(tài)

static 屬于 類不屬于 對象

// ES 5

// function Stu(){
//
// }

// 下面定義的屬性方法屬性 Stu , 相當(dāng)于 靜態(tài)的
// name 屬性 , 比較特殊 為  Stu
// Stu.age = 12;
// Stu.sayHello = function(){
//     console.log("hello, 我是王小二");
// }
// console.log(Stu.age)
// Stu.sayHello();

// Stu.prototype.sex = '男';
//
// let wang = new Stu();
// //  這些屬性是屬于 Phone 的, 而不是屬于 wang 的
// console.log(wang.name);
// wang.sayHello();
// console.log(wang.sex);


// ES 6
class Stu{
    //靜態(tài)屬性
    static name = '李小三';
    static sayHello(){
        console.log("hello, 我是李小三");
    }
}

let li = new Stu();
console.log(li.name);
// li.sayHello();
console.log(Stu.name);
Stu.sayHello();

2.12.3.繼承

2.12.3.1.ES 5 構(gòu)造繼承
// ES 5
// 人員 父類
function Person(name, sex){
    this.name = name;
    this.sex = sex;
}

//添加方法
Person.prototype.sayHi = function(){
    console.log("大家好!!");
}

//員工 子類 , 增加了 salary 薪水 屬性
function Employee(name, sex, salary){
    // 調(diào)用父類的構(gòu)造函數(shù), 將自己及屬性值 傳入
    Person.call(this, name, sex);
    this.salary = salary;
}

//設(shè)置子級構(gòu)造函數(shù)的原型
Employee.prototype = new Person;
Employee.prototype.constructor = Employee;

//聲明子類的方法
Employee.prototype.eat = function(){
    console.log("去食堂")
}



const wang = new Employee('王小二', '男',6499 );

console.log(wang);
console.log(wang.name);
console.log(wang.sex);
console.log(wang.salary);
wang.sayHi();
wang.eat()

在這段代碼中,EmployeePerson 的子類。以下是這兩句代碼的含義:

  1. Employee.prototype = new Person; 這行代碼的作用是將 Person 構(gòu)造函數(shù)的一個實例賦值給 Employee 原型對象。通過這樣做,所有 Employee 類的實例都將繼承 Person 類的所有方法和屬性(通過原型鏈)。在這里調(diào)用 new Person 時并沒有傳入?yún)?shù),因此新創(chuàng)建的 Person 實例的 namesex 屬性將是 undefined。不過,在接下來的 Employee 構(gòu)造函數(shù)內(nèi)部已經(jīng)通過 Person.call(this, name, sex) 正確地設(shè)置了這些屬性。
  2. Employee.prototype.constructor = Employee; 在 JavaScript 中,每個構(gòu)造函數(shù)的原型對象都有一個內(nèi)置的 constructor 屬性,它指向該構(gòu)造函數(shù)本身。但是,當(dāng)執(zhí)行了 Employee.prototype = new Person 后,Employee 原型對象的 constructor 被修改為指向 Person。為了修復(fù)這一問題,并確保 Employee 的實例能夠正確識別其構(gòu)造函數(shù),需要手動設(shè)置 Employee.prototype.constructorEmployee。這樣做的目的是在后續(xù)可能涉及檢查對象構(gòu)造函數(shù)的場景下(如 instanceof 操作符或 .constructor 屬性),能正確識別出對象是由哪個構(gòu)造函數(shù)創(chuàng)建的。
2.12.3.2.ES 6 構(gòu)造繼承
// ES 6
class Person {
    //構(gòu)造方法
    constructor(name, sex){
        this.name = name;
        this.sex = sex;
    }

    //父類的成員方法
    sayHi(){
        console.log("大家好!!");
    }
}

class Employee extends Person {
    //構(gòu)造方法
    constructor(name, sex, salary) {
        super(name, sex);// Phone.call(this, brand, price)
        this.salary = salary;
    }

    eat() {
        console.log("去食堂")
    }

    // sayHi(){
    //     console.log("大家好!!我轉(zhuǎn)正了");
    // }
}

const li = new Employee('李小三', '女', 5799 );
console.log(li);
console.log(li.name);
console.log(li.sex);
console.log(li.salary);
li.sayHi();
li.eat()

2.12.4.( ES 11 )私有屬性

通過 在屬性前加 # 來設(shè)置私有的屬性,

在內(nèi)部可以直接使用( 如: info() ),

在外部直接調(diào)用 會報錯 , Uncaught SyntaxError: Private field ‘#age’ must be declared in an enclosing class文章來源地址http://www.zghlxwxcb.cn/news/detail-832581.html

class Person{
     //公有屬性
     name;
     //私有屬性
     #age;
     #weight;
     //構(gòu)造方法
     constructor(name, age, weight){
         this.name = name;
         this.#age = age;
         this.#weight = weight;
     }

     info(){
         console.log(this.name);
         console.log(this.#age);
         console.log(this.#weight);
     }
 }

//實例化
const girl = new Person('李小三', 18, '45kg');

console.log(girl.name); // 李小三
console.log(girl.#age); // Uncaught SyntaxError: Private field '#age' must be declared in an enclosing class
console.log(girl.#weight); // Uncaught SyntaxError: Private field '#weight' must be declared in an enclosing class

girl.info();

到了這里,關(guān)于ECMAScript 6+ 新特性 ( 二 )的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 3分鐘搞懂:JavaScript 和 ECMAScript

    ECMAScript 是 JavaScript 語言的 國際標(biāo)準 ,JavaScript 是 ECMAScript 的 一種實現(xiàn) (Adobe ActionScript 和 JScript 同樣實現(xiàn)了 ECMAScript)。 ECMAScript 是歐洲計算機制造商協(xié)會 ECMA(European Computer Manufacturers Association)發(fā)布的瀏覽器腳本語言標(biāo)準。它是 262 號標(biāo)準文件,又叫 ECMA-262。 ECMAScript 定義

    2023年04月22日
    瀏覽(27)
  • 深入理解 ECMAScript modules:提升你的 JavaScript 技能(一)

    深入理解 ECMAScript modules:提升你的 JavaScript 技能(一)

    ?? 前端開發(fā)工程師、技術(shù)日更博主、已過CET6 ?? 阿珊和她的貓_ CSDN 博客專家、23年度博客之星前端領(lǐng)域TOP1 ?? ???高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》 ?? 藍橋云課 簽約作者、上架課程《Vue.js 和 Egg.js 開發(fā)企業(yè)級健康管理項目》、《帶你

    2024年02月20日
    瀏覽(22)
  • 深入理解 ECMAScript modules:提升你的 JavaScript 技能(六)

    深入理解 ECMAScript modules:提升你的 JavaScript 技能(六)

    ?? 前端開發(fā)工程師、技術(shù)日更博主、已過CET6 ?? 阿珊和她的貓_ CSDN 博客專家、23年度博客之星前端領(lǐng)域TOP1 ?? ???高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》 ?? 藍橋云課 簽約作者、上架課程《Vue.js 和 Egg.js 開發(fā)企業(yè)級健康管理項目》、《帶你

    2024年02月21日
    瀏覽(31)
  • 【前端】ECMAScript6從入門到進階

    【前端】ECMAScript6從入門到進階

    1.ES6簡介及環(huán)境搭建 1.1.ECMAScript 6簡介 (1)ECMAScript 6是什么 ECMAScript 6.0(以下簡稱 ES6)是 JavaScript 語言的下一代標(biāo)準,已經(jīng)在2015年6月正式發(fā)布了。它的目標(biāo),是使得 JavaScript 語言可以用來編寫復(fù)雜的大型應(yīng)用程序,成為企業(yè)級開發(fā)語言。 (2)ECMAScript 和 JavaScript 的關(guān)系 E

    2024年02月07日
    瀏覽(22)
  • 前端框架前置課Node.js學(xué)習(xí)(1) fs,path,模塊化,CommonJS標(biāo)準,ECMAScript標(biāo)準,包

    前端框架前置課Node.js學(xué)習(xí)(1) fs,path,模塊化,CommonJS標(biāo)準,ECMAScript標(biāo)準,包

    目錄 什么是Node.js 定義 作用: 什么是前端工程化 Node.js為何能執(zhí)行Js fs模塊-讀寫文件 模塊 語法: 1.加載fs模塊對象 2.寫入文件內(nèi)容 3.讀取文件內(nèi)容 Path模塊-路徑處理 為什么要使用path模塊 語法 URL中的端口號 http模塊-創(chuàng)建Web服務(wù) 需求 步驟: 案例:瀏覽時鐘 步驟: 什么是模塊化 定

    2024年01月16日
    瀏覽(54)
  • ECMAScript6詳解

    ECMAScript 6,也被稱為 ES6 或 ECMAScript 2015,是 JavaScript 編程語言標(biāo)準的一個主要更新。它于 2015 年正式發(fā)布,并帶來了許多新特性和改進,使得 JavaScript 開發(fā)更加現(xiàn)代化和高效。下面是 ES6 的一些關(guān)鍵特性的詳解: let 和 const : ES6 引入了 let 和 const 用于變量聲明,提供了

    2024年01月16日
    瀏覽(57)
  • ECMAScript 6之Map

    此文內(nèi)容大多數(shù)出自阮一峰的ECMAScript 6 入門,大家可閱讀原文。 Map 是 JavaScript 中的一種數(shù)據(jù)結(jié)構(gòu),它可以用于存儲鍵值對,并且鍵可以是任意類型的值。與普通對象相比, Map 提供了更多的靈活性和擴展性。 以下是 Map 的一些特點和用法: 鍵可以是任意類型: Map ?中的鍵可

    2024年01月23日
    瀏覽(22)
  • ECMAScript 6

    ES6 全稱ECMAScript 6 也叫ECMAScript2015 ES6的主要技術(shù) 1、變量、常量 2、取值賦值、解構(gòu) 3、運算符的擴展、展開運算符、指數(shù)運算符 4、字符串的擴展 5、數(shù)組的擴展 6、函數(shù)的擴展 7、Set單值集合 8、Map鍵值對集合 9、對象的擴展 10、生成器和迭代器與迭代器接口 11、反射Reflect 12、

    2024年01月16日
    瀏覽(45)
  • ECMAScript 6語法簡介

    在Vue開發(fā)中,使用塊作用域構(gòu)造 let 和 const 可以更好地管理變量的作用域,避免出現(xiàn)意外的變量污染。 let 可以在塊級作用域中聲明一個變量,并且該變量僅在該作用域內(nèi)有效。 解析:在上述代碼中,我們在塊級作用域內(nèi)部使用 let 聲明了變量 value 。在 if 代碼塊內(nèi)部,

    2024年02月15日
    瀏覽(25)
  • ECMAScript 6 之Promise

    ECMAScript 6 之Promise

    查看更多文章: https://alili.tech Promise與上一章的Generator一樣,也是異步編程的一種解決方案. 在 jQuery,Angular都能找到相似的處理異步的方法. 這就是一個完整的Promise的使用方法.是不是非常的簡單?

    2024年02月08日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包