1. 程式人生 > >__defineGetter__,__defineSetter__和Object.defineProperty

__defineGetter__,__defineSetter__和Object.defineProperty

setters als obj 簡單 rop tps least 默認 常用

// __defineGetter__ at the least works in more browsers
// http://robertnyman.com/javascript/javascript-getters-setters.html
// Object.defineProperty only works in Chrome

//用法 String.prototype.__defineGetter__ = (‘name‘,function(){ return nnn});
String.prototype.__defineSetter__ = (‘name‘,function(x){ return nnn});

//這兩個通常用來給內置對象定義seter和geter,不過已經要廢棄了,取而代之的是Object.defineProperty

  Object.defineProperty(obj, ‘key‘, { // descriptor });

   使得可以直接在某一對象上定義一個屬性,這個屬性可以是添加或修改現有的屬性,前兩個參數都很好理解,obj就是要修改的對象,key就是屬性名,descriptor是一個對象,用來聲明新添屬性的一些特性,包括6個參數:

  • configurable:默認false,表示此屬性是否可用delete刪除

  • enumerable: 默認為false,表示此屬性是否可被for...in、Object.keys遍歷到

  • value:默認undefined,此屬性的值,可以是任何JavaScript類型

  • writable:默認為false,此屬性是否可被改寫

  • get:默認undefined,指定一個函數,當屬性被調用時,此函數也被調用,默認為返回屬性值

  • set:默認undefined,指定一個函數,當屬性被賦值時,此函數也被調用,僅接受一個參數,參數為屬性被賦的值

 var a = {};
 Object.defineProperty = (a,‘m‘,{
        value:‘hello world‘
    })

console.log(a.m)  //hello world

當然這是最簡單的用法

__defineGetter__,__defineSetter__和Object.defineProperty