__defineGetter__,__defineSetter__和Object.defineProperty
阿新 • • 發佈:2017-07-07
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