__defineGetter__,__defineSetter__和Object.defineProperty

// __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 }); 
javascript

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

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

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

  • value:默認undefined,此屬性的值,能夠是任何JavaScript類型spa

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

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

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

    

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

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

固然這是最簡單的用法對象

相關文章
相關標籤/搜索