Object的屬性函數
查看官網:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object 第一段代碼: var person={}; Object.defineProperty(person,'name',{ configurable:true,//可否使用delete、可否修改屬性特性、或可否修改訪問器屬性、,false爲不可從新定義,默認值爲true enumerable:false,//對象屬性是否可經過for-in循環,flase爲不可循環,默認值爲true //writable:true,//對象屬性是否可修改,flase爲不可修改,默認值爲true //value:'huang', //對象屬性的默認值,默認值爲undefined set:function(newValue){ this.name=newValue; }, get:function(){ return this.name; } }); 當get,set出現的時候不能出現value和writable, 不然報錯:Uncaught TypeError: Invalid property descriptor. Cannot both specify accessors and a value or writable attribute, #<Object> at Function.defineProperty (<anonymous>) at <anonymous>:2:8 第二段代碼: var waterfall={}; Object.defineProperty(waterfall,'name',{ configurable:true,//可否使用delete、可否修改屬性特性、或可否修改訪問器屬性、,false爲不可從新定義,默認值爲true enumerable:false,//對象屬性是否可經過for-in循環,flase爲不可循環,默認值爲true //writable:true,//對象屬性是否可修改,flase爲不可修改,默認值爲true //value:'huang', //對象屬性的默認值,默認值爲undefined set:function(newValue){ this.name=newValue; }, get:function(){ return "Namess"+this.name; } }); 問題:這段代碼會報錯,由於在set和get函數裏出現了this.name= 和 return 裏有this.name 致使一直循環遞歸沒法中止,才報錯的。 相似於: function a() { a(); } 調用a,會無限循環。 解決辦法是: var waterfall={}; Object.defineProperty(waterfall,'name',{ configurable:true,//可否使用delete、可否修改屬性特性、或可否修改訪問器屬性、,false爲不可從新定義,默認值爲true enumerable:false,//對象屬性是否可經過for-in循環,flase爲不可循環,默認值爲true //writable:true,//對象屬性是否可修改,flase爲不可修改,默認值爲true //value:'huang', //對象屬性的默認值,默認值爲undefined set:(newValue)=>{ this.name=newValue; }, get:()=>{ return "Namess"+this.name; } }); Object.defineProperties(object, props) 參數 object: 定義的對象 props: 添加的屬性, key和 value 分別Object.defineProperty 中的第二和第三個參數。 例子: let waterfall={}; Object.defineProperties(waterfall,{ name:{ configurable:true, enumerable:true, set:(val)=>{ this.name=val }, get:()=>{ return this.name } }, age:{ configurable:true, enumerable:true, set:(val)=>{ this.age=val }, get:()=>{ return this.age } } }) Object的6個屬性: configurable,enumerable,writable,value,set,get。 Object.observe已經被廢棄。 Object.keys(waterfall) //[ 'name', 'age' ]