最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript?ES6中class定義類實(shí)例方法

 更新時(shí)間:2022年07月08日 11:10:16   作者:不苒  
ES6提供了更接近面向?qū)ο?注意:javascript本質(zhì)上是基于對(duì)象的語言)語言的寫法,引入了Class(類)這個(gè)概念,作為對(duì)象的模板,下面這篇文章主要給大家介紹了關(guān)于JavaScript?ES6中class定義類的相關(guān)資料,需要的朋友可以參考下

前言

我們會(huì)發(fā)現(xiàn),按照之前學(xué)習(xí)過的構(gòu)造函數(shù)形式創(chuàng)建 類 ,不僅僅和編寫普通的函數(shù)過于相似,而且代碼并不容易理解。

在 ES6(ECMAScript2015)新的標(biāo)準(zhǔn)中使用了class關(guān)鍵字來直接定義類;
但是類本質(zhì)上依然是之前所學(xué)習(xí)過的構(gòu)造函數(shù)、原型鏈的語法糖而已。所以學(xué)好之前的構(gòu)造函數(shù)、原型鏈更有利于我們理解類的概念和繼承關(guān)系。

正文

1.聲明類的兩種方式:

class 關(guān)鍵字 類的聲明

class Person{}

類表達(dá)式(不常用)

var People = class { }

那么 Person類的原型是什么?如下展示了原型和typeof中Person的類型

console.log(Person.prototype) // Person {}
console.log(Person.prototype.__proto__) // {}
console.log(Person.constructor) // [Function: Function]
console.log(typeof Person) // function

2.class 類的構(gòu)造函數(shù)

如果我們希望在創(chuàng)建對(duì)象的時(shí)候給類傳遞一些參數(shù),這個(gè)時(shí)候應(yīng)該怎么做呢?

  • 每個(gè)類都可以有一個(gè)自己的構(gòu)造函數(shù)(方法),這個(gè)方法的名稱是固定的 constructor
  • 當(dāng)我們通過new操作符,操作一個(gè)類的時(shí)候會(huì)調(diào)用這個(gè)類的構(gòu)造函數(shù)constructor
  • 每個(gè)類只能有一個(gè)構(gòu)造函數(shù),如果包含多個(gè)構(gòu)造函數(shù),那么會(huì)拋出異常。

示例代碼如下:

// 類的聲明
class Person {
    // 類的構(gòu)造方法
    constructor(name, age) {
        this.name = name
        this.age = age
    }
    foo () {
        console.log(this.name)
    }
}
var p1 = new Person('h', 19)

console.log(p1)// Person { name: 'h', age: 19 }
p1.foo() // h

當(dāng)我們通過new關(guān)鍵字操作類的時(shí)候,會(huì)調(diào)用這個(gè) constructor函數(shù),并執(zhí)行如下操作(假設(shè)new關(guān)鍵字新創(chuàng)建的對(duì)象為p1):

  • 在內(nèi)存中創(chuàng)建一個(gè)對(duì)象
  • 將類的原型prototype賦值給創(chuàng)建出來的對(duì)象 p1.__proto__ = Person.prototype
  • 將對(duì)象賦值給函數(shù)的this:new綁定 this = p1
  • 執(zhí)行函數(shù)體中的代碼
  • 自動(dòng)返回創(chuàng)建出來的對(duì)象
    **

3.class中方法定義

3.1 class 中定義普通的實(shí)例方法

class Person {
    // 類的構(gòu)造方法
    constructor(name, age) {
        this.name = name
        this.age = age
        this._address = '北京市'
    }
    eating () {
        console.log(this.name + ' 正在eating~')
    }
    running () {
        console.log(this.name + ' 正在running~')
    }
}

var p1 = new Person('jam', 19)
console.log(p1)
p1.eating()
p1.running()

3.2 class 類中定義訪問器方法

class Person {
    // 類的構(gòu)造方法
    constructor(name, age) {
        this.name = name
        this.age = age
        this._address = '北京市'
    }
    // 類的訪問器方法
    get address () {
        // 在這里可以設(shè)置攔截訪問操作
        console.log('獲取呢')
        return this._address
    }
    set address (newValue) {
        // 在這里可以設(shè)置攔截設(shè)置操作
        console.log('修改呢')
        return this._address = newValue
    }
}

var p1 = new Person('jam', 19)
console.log(p1.address)
p1.address = '天津市'
console.log(p1.address)

3.3 類的靜態(tài)方法(類方法)

類的靜態(tài)方法就是在方法前加一個(gè)static關(guān)鍵字,該方法就成為了類的靜態(tài)方法。
類的靜態(tài)方法,不會(huì)被類的實(shí)例繼承,而是直接通過類來調(diào)用。

小案例:使用類的靜態(tài)方法完成隨機(jī)生成Person實(shí)例

class Person {
    // 類的構(gòu)造方法
    constructor(name, age) {
        this.name = name
        this.age = age
        this._address = '北京市'
    }
    
    // 類的靜態(tài)方法(也稱為類方法)  創(chuàng)建對(duì)象隨機(jī)生成一個(gè)名字小案例
    static randomPerson () {
        // 創(chuàng)建一個(gè)存儲(chǔ)名字的數(shù)組
        let names = ['jam', 'jak', 'jag', 'jao', 'jno']
        // Math.random()生成一個(gè)0-1之間的數(shù)字,小數(shù)肯定是不對(duì)的
        let nameIndex = Math.floor(Math.random() * names.length)
        let name = names[nameIndex]
        // 生成隨機(jī)年齡
        let age = Math.floor(Math.random() * 100)
        // return隨機(jī)生成的人物 姓名+ 年齡
        return new Person(name, age)
    }
}

這里直接調(diào)用類的靜態(tài)方法就可以 不需要使用new操作符創(chuàng)建創(chuàng)建實(shí)例對(duì)象

隨機(jī)生成一個(gè)Person實(shí)例(附效果圖)

// 隨機(jī)生成一個(gè)  
var p2 = Person.randomPerson()
console.log(p2)

請(qǐng)?zhí)砑訄D片描述

隨機(jī)生成多個(gè)Person實(shí)例(附帶效果圖)

// 隨機(jī)生成多個(gè)
for (let index = 0; index < 20; index++) {
    console.log(Person.randomPerson())
}

文末

到此這篇關(guān)于JavaScript ES6中class定義類的文章就介紹到這了,更多相關(guān)ES6中class定義類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS檢測(cè)數(shù)組類型的方法小結(jié)

    JS檢測(cè)數(shù)組類型的方法小結(jié)

    這篇文章主要介紹了js檢測(cè)數(shù)組類型的方法小結(jié),有instanceof方法Array.isArray() 方法和Object.prototype.toString.call()方法,都是比較常用的,需要的朋友可以參考下
    2017-03-03
  • JS實(shí)現(xiàn)拖拽元素時(shí)與另一元素碰撞檢測(cè)

    JS實(shí)現(xiàn)拖拽元素時(shí)與另一元素碰撞檢測(cè)

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)拖拽元素時(shí)與另一元素碰撞檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • JS實(shí)現(xiàn)清除指定cookies的方法

    JS實(shí)現(xiàn)清除指定cookies的方法

    這篇文章主要介紹了JS實(shí)現(xiàn)清除指定cookies的方法,在web程序設(shè)計(jì)中非常實(shí)用,需要的朋友可以參考下
    2014-09-09
  • layui按條件隱藏表格列的實(shí)例

    layui按條件隱藏表格列的實(shí)例

    今天小編就為大家分享一篇layui按條件隱藏表格列的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JavaScript鼠標(biāo)拖拽事件詳解

    JavaScript鼠標(biāo)拖拽事件詳解

    這篇文章主要為大家詳細(xì)介紹了JavaScript鼠標(biāo)拖拽事件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 9102了,你還不會(huì)移動(dòng)端真機(jī)調(diào)試嗎

    9102了,你還不會(huì)移動(dòng)端真機(jī)調(diào)試嗎

    這篇文章主要介紹了9102了,你還不會(huì)移動(dòng)端真機(jī)調(diào)試嗎,本文詳細(xì)的介紹了3種移動(dòng)端真機(jī)調(diào)試方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • promise中reject和catch處理上區(qū)別對(duì)比分析

    promise中reject和catch處理上區(qū)別對(duì)比分析

    在 Promise 中,reject?和?catch?是處理異步操作失敗的兩種方式,本文給大家介紹promise中reject和catch處理上區(qū)別對(duì)比分析,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • 詳解JavaScript實(shí)現(xiàn)動(dòng)態(tài)的輪播圖效果

    詳解JavaScript實(shí)現(xiàn)動(dòng)態(tài)的輪播圖效果

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)動(dòng)態(tài)的輪播圖效果,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • JavaScript生成.xls文件的代碼

    JavaScript生成.xls文件的代碼

    這篇文章主要介紹了JavaScript生成.xls文件的代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • 第一次接觸神奇的Bootstrap菜單和導(dǎo)航

    第一次接觸神奇的Bootstrap菜單和導(dǎo)航

    第一次接觸神奇的Bootstrap菜單和Bootstrap導(dǎo)航,Bootstrap讓W(xué)eb開發(fā)更迅速、更簡(jiǎn)單,感興趣的小伙伴們可以參考一下
    2016-08-08

最新評(píng)論

酉阳| 康定县| 大荔县| 门源| 临武县| 繁昌县| 太白县| 老河口市| 双江| 安义县| 阳曲县| 阿鲁科尔沁旗| 彭水| 区。| 杭锦后旗| 华安县| 绥宁县| 洪江市| 渑池县| 新乡县| 九江县| 陆河县| 开化县| 抚宁县| 台中市| 惠东县| 淄博市| 井冈山市| 淮北市| 台东县| 万载县| 二连浩特市| 滕州市| 琼中| 罗山县| 观塘区| 台前县| 子洲县| 涡阳县| 彰化市| 巢湖市|