JavaScript -- 理解對象的屬性

來源:互聯網
上載者:User

標籤:===   刪除   預設值   必須   The   else   false   cti   不能   

備忘: 本文長期修改說明:ECMAScript中屬性有兩種:資料屬性和訪問器屬性。屬性描述符1. 資料屬性說明:當修改或定義對象的某個屬性的時候,給這個屬性添加一些特性。
特性名稱 描述 預設值
value 設定屬性的值 undefined
writable 設定是否可修改值 true
enumerable 表示能否通過for-in或 obj.keys()迴圈返回屬性。 true
configurable
  1. 表示能否通過 delete 刪除屬性從而重新定義屬性
  2. 能否修改屬性的特性
  3. 能否把屬性修改為訪問器屬性
true
var obj = {    test:"hello"}//對象已有的屬性添加特性描述Object.defineProperty(obj,"test",{    configurable:true | false,    enumerable:true | false,    value:任意類型的值,    writable:true | false});//對象新添加的屬性的特性描述Object.defineProperty(obj,"newKey",{    configurable:true | false,    enumerable:true | false,    value:任意類型的值,    writable:true | false});

在使用 Object.definePropertyObject.definePropertiesObject.create 函數的情況下添加資料屬性,writable、enumerable和configurable預設值為 false

使用 對象字面量 建立的屬性,writable、enumerable和configurable特性預設為true。

2. 訪問器屬性說明:設定或擷取對象的某個屬性的值。
特性名稱 描述 預設值
Get 在讀取屬性時調用的函數 undefined
Set 在寫入屬性時調用的函數 true
enumerable 是否可以被枚舉(使用for...in或Object.keys()) true
configurable
  1. 表示能否通過 delete 刪除屬性從而重新定義屬性
  2. 能否修改屬性的特性
  3. 能否把屬性修改為訪問器屬性(目標屬性是否可以再次設定特性)
true
var obj = {};Object.defineProperty(obj, "newKey", {    get:function (){} | undefined,    set:function (value){} | undefined    configurable: true | false    enumerable: true | false});
注意:當使用了getter或setter方法,不允許使用writable和value這兩個屬性ECMAScript 5中操作屬性特性的方法:1. Object.defineProperty()說明:此方法只能定義一個屬性

文法:

Object.defineProperty(obj, prop, descriptor)

參數列表:

obj:必需。目標對象 prop:必需。需定義或修改的屬性的名字descriptor:必需。目標屬性所擁有的特性

傳回值:

傳入函數的對象。即第一個參數obj
樣本
var obj = {};// Object.defineProperty(對象,屬性,屬性描述符)Object.defineProperty(obj, "name", {    get: function(){        return this._name;  //在 get 和 set 中使用訪問屬性必須加 "_"    },    set: function(val){        if(Array.isArray(val)){            this._name = val;        } else{            this._name = "不是數組不能賦值";        }    },    enumerable: true,       // 表示可枚舉的    configurable: true      // 是否可刪除屬性});// Object {get: function, set: function, enumerable: true, configurable: true}console.log(Object.getOwnPropertyDescriptor(obj, 'name')); obj.name = "111";console.log(obj.name);
2. Object.defineProperties()說明:此方法用來定義多個屬性。
var obj = {};Object.defineProperties(obj, {    name: {        value: "周華健",        writable: true    },    age: {        value: 30,        writable: true    },    sex: {        get: function(){            return this._sex;        },        set: function(val){            if(val === 1){                this._sex = "男";            }else{                this._sex = "女";            }        }    }});obj.sex = 0;console.log(obj.sex); //女

JavaScript -- 理解對象的屬性

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.