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

js通過Object.defineProperty() 定義和控制對象屬性

這篇具有很好參考價值的文章主要介紹了js通過Object.defineProperty() 定義和控制對象屬性。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

概述

  用于給一個對象定義一個新屬性或是修改某個現(xiàn)有屬性,并返回此對象。Object.defineProperty(obj,prop,descriptor)?它接收 3 個參數(shù),第 1 個是要定義屬性的對象;第 2 個是要定義或修改的屬性的屬性名或 Symbol;第 3 個是對該屬性的描述,稱之為屬性描述符,為一個對象,可以擁有 4 個 key。

  • value:設(shè)置屬性值,默認undefined;
  • writable:是否可以重寫,true | false,默認false;
  • enumerable:目標屬性是否可以被枚舉,true | false,默認false;
  • configerable:目標屬性是否可以刪除或者再次修改特性,true | false,默認false;

屬性描述

  • enumerable:描述該屬性是否是可枚舉的。如下例子,new 一個包含name和sex屬性的person實例,然后通過Object.defineProperty()定義屬性age, 然后通過for語句變量person對象的屬性,看看效果:
  • let person={name:'feixue', sex:0};
    Object.defineProperty(person,'age',
    {
        value:30,
        enumerable:false
    })
    console.log(person);
    for(let key in person)
    {
        console.log(key);
    }

    如下圖,person有3個屬性{name:'feixue',sex:0,age:30}。其中age是通過Object.defineProperty()定義的,enumerable設(shè)置false。 當(dāng)遍歷person時只能看到name和sex, 看不到age。 當(dāng)enumerable設(shè)置true時,遍歷person可以看到age屬性(自行嘗試)

js通過Object.defineProperty() 定義和控制對象屬性

?

  • value:屬性的值,可以設(shè)置和修改。注意:如果允許屬性可修改,需要設(shè)置‘writable':true。示例如下,修改age的值,看看效果:
    •  1 let person={name:'feixue', sex:0};
       2 Object.defineProperty(person,'age',
       3 {
       4     value:30,
       5     enumerable:false,
       6     writable:true
       7 })
       8 console.log(person);
       9 person.age=40;
      10 console.log(person);

      如下圖,age初始值是30,通過修改設(shè)置成40

      js通過Object.defineProperty() 定義和控制對象屬性

  • get /set : get設(shè)置屬性值,get 獲取屬性值?
    •  1 let person={name:'feixue', sex:0};
       2 let _age=45;
       3 Object.defineProperty(person,'age',
       4 {
       5     get:function()
       6     {
       7         return _age;
       8     },
       9     set(value)
      10     {
      11         _age=value;
      12     }
      13 })
      14 console.log("age is "+person.age);
      15 person.age=60;
      16 console.log("age is "+person.age);

      如圖所示,getter和setter可以寫成get(){}/set(value){} 或者 get:function{}/set:function(value){} 。 當(dāng)屬性被獲取時,會執(zhí)行g(shù)etter函數(shù)。當(dāng)屬性被設(shè)置時,會執(zhí)行setter函數(shù)。

      js通過Object.defineProperty() 定義和控制對象屬性

?

 請注意, 使用getter 和 setter ,就不可以設(shè)置value了。請看下面的示例,同時使用getter/setter 和 value會報什么錯誤?

    •  1 let person={name:'feixue', sex:0};
       2 let _age=45;
       3 Object.defineProperty(person,'age',
       4 {
       5     value:30,
       6     get:function()
       7     {
       8         return _age;
       9     },
      10     set(value)
      11     {
      12         _age=value;
      13     }
      14 })
      15 console.log(person);

        此處同時使用了value和 getter/setter, 報錯信息如下

js通過Object.defineProperty() 定義和控制對象屬性

另外,使用value和 getter/setter 還是有區(qū)別的, 請看下圖, 2者有什么區(qū)別? 如下圖,圖一使用了vue, 圖二使用了getter/setter.

js通過Object.defineProperty() 定義和控制對象屬性

js通過Object.defineProperty() 定義和控制對象屬性

?

  • ?到此這篇關(guān)于js 通過Object.defineProperty() 定義和控制對象屬性的文章就介紹到這了。歡迎光臨我的博客:巨大的石頭 - 博客園 (cnblogs.com)

   文章來源地址http://www.zghlxwxcb.cn/news/detail-837625.html

到了這里,關(guān)于js通過Object.defineProperty() 定義和控制對象屬性的文章就介紹完了。如果您還想了解更多內(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)文章

  • Vue2和vue3中雙向數(shù)據(jù)綁定的原理,ES6的Proxy對象代理和JavaScript的Object.defineProperty,使用詳細

    簡介: Object.defineProperty大家都知道,是vue2中雙向數(shù)據(jù)綁定的原理,它 是 JavaScript 中一個強大且常用的方法,用于定義對象屬性,允許我們精確地控制屬性的行為,包括讀取、寫入和刪除等操作; 而Proxy是vue3中雙向數(shù)據(jù)綁定的原理,是ES6中一種用于創(chuàng)建代理對象的特殊對象,

    2024年02月15日
    瀏覽(46)
  • JavaScript之Object.defineProperty()

    經(jīng)常使用的定義與賦值方法 obj.prop =value 或者 obj[\\\'prop\\\']=value Object.defineProperty() 的作用就是直接在一個對象上定義一個新屬性,或者修改一個已經(jīng)存在的屬性 obj 需要定義屬性的當(dāng)前對象 prop 當(dāng)前需要定義的屬性名 desc 屬性描述符 一般通過為對象的屬性賦值的情況下,對象的屬

    2024年02月09日
    瀏覽(22)
  • Vue中的Object.defineProperty詳解

    Vue中的Object.defineProperty是一個比較重要的方法,它是可以定義對象中屬性的一個方法,相比于在對象中直接定義的對象,它更具有靈活性。 直接定義對象中的屬性是這樣的: 而Object.defineProperty可以直接在上面的對象中添加屬性,如下面所示: 如果用上面的方法進行定義屬性

    2024年02月13日
    瀏覽(17)
  • 詳解vue中的Object.defineProperty

    詳解vue中的Object.defineProperty

    ? ?如果想要age遍歷的話 就設(shè)置屬性 打印出來 發(fā)現(xiàn)有可以枚舉的屬性age? 參考課程: 011_尚硅谷Vue技術(shù)_Object.defineProperty_嗶哩嗶哩_bilibili ? // 1.Vue中的數(shù)據(jù)代理: ? ? // ? ?通過Vm對象來代理data對象中屬性的操作(讀/寫) ? ? // 2.Vue中數(shù)據(jù)代理的好處: ? ? // ? 更加方便的

    2024年02月04日
    瀏覽(22)
  • 使用object.defineProperty來更新數(shù)據(jù)示例

    使用object.defineProperty來更新數(shù)據(jù)示例

    vue+element UI 第001個 查看專欄目錄: 按照VUE知識點 ------ 按照element UI知識點 echarts,openlayers,cesium,leaflet,mapbox,d3,canvas 免費交流社區(qū) 專欄目標 在vue和element UI聯(lián)合技術(shù)棧的操控下,本專欄提供行之有效的源代碼示例和信息點介紹,做到靈活運用。 (1)提供vue2的一些基本操

    2024年02月06日
    瀏覽(16)
  • 【javaScript】Proxy與Object.defineProperty的區(qū)別

    【javaScript】Proxy與Object.defineProperty的區(qū)別

    Proxy和Object.defineProperty都是JavaScript中用于實現(xiàn)對象屬性攔截和代理的機制,但它們在功能和應(yīng)用方面有一些區(qū)別。 Object.defineProperty:它是 ES5 引入的屬性定義方法,通過直接定義對象屬性的特性(如可枚舉性、可寫性等),可以攔截屬性的讀取、寫入和刪除操作。但它 只能攔

    2024年02月08日
    瀏覽(16)
  • ts定義對象類型Record<string, any>;和object、Object的區(qū)別

    ts定義對象類型Record<string, any>;和object、Object的區(qū)別

    Record 是 TS 內(nèi)置的一個高級類型,是通過映射類型的語法來生成索引類型的 比如傳入 \\\'a\\\' | \\\'b\\\' 作為 key,1 作為 value,就可以生成這樣索引類型: 所以這里的 Recordstring, any 也就是 key 為 string 類型,value 為任意類型的索引類型,可以代替 object 來用,更加語義化一點: Record 與

    2024年02月16日
    瀏覽(27)
  • typescript 對象的屬性定義

    [propName: string] :表示對象屬性可以是任意值

    2024年02月21日
    瀏覽(14)
  • 【JS】js給對象動態(tài)添加、設(shè)置、刪除屬性名和屬性值

    js中訪問對象屬性一共有兩種方法:點獲取法和方括號獲取法。 使用點符號訪問屬性值 alert( user.name ); // John 使用方括號訪問屬性值 alert( user[name]); // John 注意: 如果我們遍歷一個對象,我們獲取屬性的順序是和屬性添加時的順序相同嗎? 簡短的回答是:“有特別的順序”:整

    2023年04月13日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包