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

JS中關(guān)于Class類的靜態(tài)屬性和靜態(tài)方法

 更新時(shí)間:2022年10月13日 12:19:02   作者:燕穗子博客  
這篇文章主要介紹了JS中關(guān)于Class類的靜態(tài)屬性和靜態(tài)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、類的兩個(gè)概念

1、類自身;

2、類的實(shí)例對(duì)象;

總的來說:靜態(tài)的是指向類自身,而不是指向?qū)嵗龑?duì)象,主要是歸屬不同,這是靜態(tài)屬性,靜態(tài)方法的核心。

二、對(duì)象的兩個(gè)部分

1、屬性 

分為:實(shí)例屬性、靜態(tài)屬性(類屬性)、只讀屬性

2、方法

分為:實(shí)例方法、靜態(tài)方法(類方法)

class Person {
? //1、定義方法
? /* 1.1、實(shí)例屬性,直接定義的屬性,要new實(shí)例后,實(shí)例去訪問的*/
? name= "tom";
? age = 10;
? /* 1.2、靜態(tài)屬性(類屬性),通過static開頭的屬性,Person類可以訪問,
? ? 不需要?jiǎng)?chuàng)建實(shí)例,實(shí)例訪問不到 */
? static height = 180;
? /* 1.3、只讀屬性,readonly開頭的屬性,只可讀,不可改*/
? readonly money= 1000;
?
? //2、定義方法
?
? say(){
? ? ? console.log('hello world'); ? ?
? }
? static work(){
? ? ? console.log('我能掙錢'); ? ?
? }
}
const per = new Person();
//per.money=2000 ?報(bào)錯(cuò),不可修改
console.log(per, Person.height);
per.say() ?//調(diào)用實(shí)例方法
Person.work() //調(diào)用類方法

三、靜態(tài)方法使用:在方法前加上static關(guān)鍵字

1、為什么使用靜態(tài)方法

阻止方法被實(shí)例繼承,類的內(nèi)部相當(dāng)于實(shí)例的原型,所有在類中直接定義的方法相當(dāng)于在原型上定義方法,都會(huì)被類的實(shí)例繼承,但是使用static靜態(tài)方法定義的不會(huì)被實(shí)例繼承。

? class User{
? ? ? ? ? ? static call(){
? ? ? ? ? ? ? ?console.log('你好呀');
? ? ? ? ? ? }
? ? ? ? }
? ? ? User.call()//你好呀
?
? ? ? let ff = new User()
? ? ? ff.call()//報(bào)錯(cuò),實(shí)例不能訪問類的靜態(tài)方法

這里類User可以直接使用call方法,但它的是實(shí)例ff卻不可以!

但是我們可以通過繼承的方式,讓另一個(gè)類來繼承User里面的方法

class User{
? ? ? ? ? ? static call(){
? ? ? ? ? ? ? ?console.log('你好呀');
? ? ? ? ? ? }
? ? ? ? }
??
??
? ? ?class foo extends User{}
? ? ?foo.call()//'你好呀' ? ?

這里foo類通過繼承User類,才可以使用User里面的靜態(tài)方法。

我們知道class類這個(gè)概念是es6后出來的新特性,用以前的es5方法寫就是:

?class User{
? ? ? ? ? ? static call(){
? ? ? ? ? ? ? ?console.log('靜態(tài)方法的你好呀');
? ? ? ? ? ? }
? ? ? ? ? ? call(){
? ? ? ? ? ? ? ?console.log('構(gòu)造函數(shù)方法的你好呀');
? ? ? ? ? ? }
? ? ? ? }
?
//等同于
function User(){}
? ? ?User.call=function(){
? ? ? ? ?console.log('靜態(tài)方法的你好呀');
? ? ?}
? ?
? ? User.prototype.call=function(){
? ? ? ? ?console.log('構(gòu)造函數(shù)方法的你好呀');
? ? ?}

但是User類里面的構(gòu)造函數(shù)方法是可以被實(shí)例調(diào)用的,如圖:

function User(){}
User.prototype.call=function(){
? ? ? ? ?console.log('你好呀');
? ? ?}
? ? ?let h1 =new User()
? ? ?h1.call()//你好呀

完整版如下

class User {
? ? ? ? ? ? call() {
? ? ? ? ? ? ? ? // 這里面的this指向構(gòu)造函數(shù)的對(duì)象
? ? ? ? ? ? ? ? console.log(this === hh); // true
? ? ? ? ? ? ? ? console.log("構(gòu)造函數(shù)方法的你好呀");
? ? ? ? ? ? }
? ? ? ? ? ? static call() {
? ? ? ? ? ? ? ? // 這里面的this指向類本身
? ? ? ? ? ? ? ? console.log(this === User); // true
? ? ? ? ? ? ? ? console.log("靜態(tài)方法的你好呀");
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? // 靜態(tài)方法
? ? ? ? User.call(); //靜態(tài)方法的你好呀
?
? ? ? ? // 構(gòu)造函數(shù)方法
? ? ? ? let hh = new User();
? ? ? ? hh.call(); //構(gòu)造函數(shù)方法的你好呀

三、總結(jié)

1、靜態(tài)屬性和非靜態(tài)屬性的區(qū)別

  • 在內(nèi)存中存放的位置不同:所有static修飾的屬性和方法都存放在內(nèi)存的方法區(qū)里,而非靜態(tài)的都存在堆內(nèi)存中
  • 出現(xiàn)的時(shí)機(jī)不同:靜態(tài)屬性和方法在沒創(chuàng)建對(duì)象之前就存在,而非靜態(tài)的需要在創(chuàng)建對(duì)象才存在
  • 靜態(tài)屬性是整個(gè)類都公用的
  • 生命周期不一樣,靜態(tài)在類消失后被銷毀,非靜態(tài)在對(duì)象銷毀后銷毀
  • 用法:靜態(tài)的可以直接通過類名訪問,非靜態(tài)只能通過對(duì)象進(jìn)行訪問

2.使用static的注意事項(xiàng)

  • 帶靜態(tài)修飾符的方法只能訪問靜態(tài)屬性
  • 非靜態(tài)方法既能訪問靜態(tài)屬性也能訪問非靜態(tài)屬性
  • 非靜態(tài)方法不能定義靜態(tài)變量
  • 靜態(tài)方法不能使用this關(guān)鍵字
  • 靜態(tài)方法不能調(diào)用非靜態(tài)方法,反之可以

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • javascript 的變量、作用域和內(nèi)存問題

    javascript 的變量、作用域和內(nèi)存問題

    這篇文章主要介紹了javascript 的變量、作用域和內(nèi)存問題的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • javascript實(shí)現(xiàn)網(wǎng)站加入收藏功能

    javascript實(shí)現(xiàn)網(wǎng)站加入收藏功能

    這篇文章主要介紹了javascript實(shí)現(xiàn)網(wǎng)站加入收藏功能的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • input 寬度自適應(yīng)

    input 寬度自適應(yīng)

    感謝網(wǎng)友“l(fā)iufabin”提出的關(guān)于不支持FF的問題,第一個(gè)在FF下經(jīng)過測(cè)試時(shí)支持的,第二個(gè)中的高度自適應(yīng)不支持,我在網(wǎng)上找了一個(gè)JQUERY的插件
    2009-05-05
  • jquery實(shí)現(xiàn)右側(cè)欄菜單選擇操作

    jquery實(shí)現(xiàn)右側(cè)欄菜單選擇操作

    這篇文章主要為大家詳細(xì)介紹了jquery實(shí)現(xiàn)右側(cè)欄菜單選擇操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 前端本地文件獲取excel表格內(nèi)容并渲染在頁(yè)面的方法

    前端本地文件獲取excel表格內(nèi)容并渲染在頁(yè)面的方法

    這篇文章主要介紹了前端本地文件獲取excel表格內(nèi)容并渲染在頁(yè)面的方法,主要利用SheetJS插件用于處理Excel文件,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • JavaScript實(shí)現(xiàn)篩選數(shù)組

    JavaScript實(shí)現(xiàn)篩選數(shù)組

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)篩選數(shù)組,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • JS動(dòng)態(tài)改變?yōu)g覽器標(biāo)題的方法

    JS動(dòng)態(tài)改變?yōu)g覽器標(biāo)題的方法

    這篇文章主要介紹了JS動(dòng)態(tài)改變?yōu)g覽器標(biāo)題的方法,涉及JavaScript頁(yè)面元素結(jié)合時(shí)間函數(shù)動(dòng)態(tài)操作的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • js中利用cookie實(shí)現(xiàn)記住密碼功能

    js中利用cookie實(shí)現(xiàn)記住密碼功能

    這篇文章主要為大家詳細(xì)介紹了js中利用cookie實(shí)現(xiàn)記住密碼功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • JavaScript跨平臺(tái)的開源框架NativeScript

    JavaScript跨平臺(tái)的開源框架NativeScript

    本文給大家分享的是一款使用javascript來構(gòu)建跨平臺(tái)原生移動(dòng)應(yīng)用的開源框架--NativeScript,可以使用JavaScript開發(fā)跨平臺(tái)、真正原生的iOS, Android 和 Windows 移動(dòng)App。開發(fā)人員使用NativeScript提供的庫(kù)來構(gòu)建應(yīng)用UI,其抽象了各種原生平臺(tái)之間的不同。
    2015-03-03
  • HBuilderX開發(fā)一個(gè)簡(jiǎn)單的微信小程序的實(shí)現(xiàn)步驟

    HBuilderX開發(fā)一個(gè)簡(jiǎn)單的微信小程序的實(shí)現(xiàn)步驟

    本文主要介紹了HBuilderX開發(fā)一個(gè)簡(jiǎn)單的微信小程序的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評(píng)論

厦门市| 竹溪县| 县级市| 中方县| 兴义市| 栖霞市| 鄱阳县| 金门县| 石家庄市| 阳曲县| 建阳市| 昌江| 纳雍县| 平罗县| 涡阳县| 玛多县| 布尔津县| 江华| 泰州市| 邯郸县| 萨嘎县| 大姚县| 濮阳市| 闵行区| 兴化市| 松潘县| 南和县| 陆川县| 合阳县| 射阳县| 莲花县| 辽中县| 汤阴县| 文昌市| 金乡县| 湘西| 长治市| 秦安县| 南丰县| 日喀则市| 平南县|