Object.defineProperty()

Object.defineProperty()直接在對象上定義新屬性,或修改對象上的現有屬性,並返回該對象。
  1. 語法 Object.defineProperty(obj,prop,descriptor)
  2. 參數
  • obj 須要定義屬性的對象
  • prop 要定義或修改的屬性的名稱
  • descriptor 將被定義或修改屬性的描述符
  1. 返回值:返回傳入函數的對象,即第一個參數objjavascript

  2. 對象裏目前存在的屬性描述符有兩種主要形式:數據描述符和存取描述符。java

  • 數據描述符和存取描述符均具備如下可選鍵值:函數

    configurable:當且僅當該屬性的 configurable 爲 true 時,該屬性描述符纔可以被改變,也可以被刪除。默認爲 false。(爲false時不能設置value,writable,configurable)ui

    enumerable:當且僅當該屬性的 enumerable 爲 true 時,該屬性纔可以出如今對象的枚舉屬性中。默認爲 false。(是否能在for...in循環中遍歷出來或在Object.keys中列舉出來)spa

  • 數據描述符是一個擁有可寫或不可寫值的屬性。設計

    writable:當且僅當該屬性的 writable 爲 true 時,該屬性才能被賦值運算符改變。默認爲 false。code

    value:該屬性對應的值。能夠是任何有效的 JavaScript 值(數值,對象,函數等)。默認爲 undefined。對象

  • 存取描述符是由一對 getter-setterip

    set:一個給屬性提供 setter 的方法,若是沒有 setter 則爲 undefined。該方法將接受惟一參數,並將該參數的新值分配給該屬性。默認爲 undefined。get

    get:一個給屬性提供 getter 的方法,若是沒有 getter 則爲 undefined。該方法返回值被用做屬性值。默認爲 undefined。

注意:在 descriptor 中不能同時設置訪問器(get 和 set)和 wriable 或 value,不然會錯,就是說想用 get 和 set,就不能用 writable 或 value 中的任何一個。

set和get

var person = {};
    var name = '';// 初始化一個空值
    Object.defineProperty(person, 'personName', {
        set: function (value) {
          console.log(value);// JavaScript高級程序設計
          name = value;
        },
        get: function () {
          return '《' + name + '》';// personName的值爲return的值
        }
    });
    
    //person.personName的賦值和取值會觸發set 和 get函數
    // 賦值時調用set方法
    person.personName = 'JavaScript高級程序設計';
    // 取值時調用get方法
    console.log(person.personName);// 《JavaScript高級程序設計》,若沒有給person.personName賦值,則打印結果爲《》
複製代碼
相關文章
相關標籤/搜索