摘要:為屬性時才能被刪除,才能更改屬性,否則會報錯。決定這個對象是否可以通過遍歷到該屬性。必須是設置為時的設置才能生效。相當于把方法執行了一次使用構造函數主要是限定自定義的和方法適用范圍,例如上面的代碼,就把這兩個方法限定在下。
作用
可以設置對象屬性。比如給對象設置新屬性或修改原有屬性。
用法示例
Object.defineProperty(obj,key,{ value: val, enumerable:true, writable: true, configurable: false, get:function(){}, set:function(){}, });參數解釋
obj:要修改屬性的對象, key:要定義或修改屬性值, writable:給該屬性賦值是否可以生效, enumerable:是否可以通過 for in遍歷該屬性, configurable:是否可配置, 以及除 writable 特性外的其他特性是否可以被修改。為 true屬性時才能被刪除,才能更改enumerable屬性,否則會報錯。賦值是一直都可以的。
下面定義一個空對象,然后用Object.defineProperty方法給這個空對象定義一個新的屬性,設置它的writable參數為true。
var obj={ }; Object.defineProperty(obj,"test",{ value: "test1", writable: true, }); console.log(obj);//obj{test:test1}
然后改變test屬性的值。因為writeble的值為true,所以test屬性的值是可以改變的。
obj.test="test2";//obj{test:test2}
如果writable的值為false,則test屬性的值不會被改變。
Object.defineProperty(obj,"test",{ writable: false, }); obj.test="test3";//obj{test:test2}
enumerable決定這個對象是否可以通過for in遍歷到該屬性。true為可以通過for in遍歷該屬性。必須是configurable設置為true時enumerable的設置才能生效。
Object.defineProperty(obj,"test",{ enumerable: !!false, configurable: true }); for(var pro in obj){ console.log(pro +":"+obj[pro]); }//沒有值打印出來
configurable的值為true時才能刪除屬性。
delete obj.test;//成功刪除屬性
每個對象屬性都有默認的get和set方法,我們可以改寫它。
var myValue; Object.defineProperty(obj,"haha",{ set:function () {//get和set要一起設 myValue="test test"; }, get:function(){ return myValue; }, enumerable: true, }); for(var pro in obj){ console.log(pro +":"+obj[pro]); }//haha:undefined console.log(obj.haha);//undefined obj.haha="777"; console.log(obj.haha);//test test
只有給haha賦值時,obj.haha這個屬性才會被賦予set的值,不然會是 undefined。但是haha這個屬性在賦值前就已經被定義了。
使用場景在構造函數里自定義set和get方法。
function Test() { var pro = null; Object.defineProperty(this, "pro", { get: function () { return pro; }, set: function (value) { pro = value } }); } var mytest = new Test();//相當于把方法執行了一次 mytest.pro = haha; console.log(mytest.pro);//haha
使用構造函數主要是限定自定義的set和get方法適用范圍,例如上面的代碼,就把這兩個方法限定在mytest下。
我對上面一段的代碼理解如下:
var Test1=function () { function gg() { this.tt=1; } gg.call(this); }; var test = new Test1(); console.log(test.tt);
參考鏈接:
Object.defineProperty()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/111915.html
摘要:為屬性時才能被刪除,才能更改屬性,否則會報錯。決定這個對象是否可以通過遍歷到該屬性。必須是設置為時的設置才能生效。相當于把方法執行了一次使用構造函數主要是限定自定義的和方法適用范圍,例如上面的代碼,就把這兩個方法限定在下。 作用 可以設置對象屬性。比如給對象設置新屬性或修改原有屬性。 用法 示例 Object.defineProperty(obj,key,{ val...
摘要:為屬性時才能被刪除,才能更改屬性,否則會報錯。決定這個對象是否可以通過遍歷到該屬性。必須是設置為時的設置才能生效。相當于把方法執行了一次使用構造函數主要是限定自定義的和方法適用范圍,例如上面的代碼,就把這兩個方法限定在下。 作用 可以設置對象屬性。比如給對象設置新屬性或修改原有屬性。 用法 示例 Object.defineProperty(obj,key,{ val...
摘要:與當與同時為時,屬性不能重新使用定義,嚴格模式下會報錯示例云麒報錯當或者為時,屬性可以重新使用定義,這一點讀者不妨自行測試。 摘要: JavaScript有個很神奇的Object.defineProperty(),了解一下? =與Object.defineProperty 為JavaScript對象新增或者修改屬性,有兩種不同方式:直接使用=賦值或者使用Object.definePro...
摘要:概念中定義了一個名叫屬性描述符的對象,用于描述了的各種特征。只指定則表示屬性為只讀屬性。使用屬性描述符對象只能在或中使用。修改已有的屬性會拋出類型錯誤異常添加屬性會拋出類型錯誤異常不能修屬性結語我對屬性描述符很不熟悉,主要是因為平時用得少。 概念 ECMAScript 5 中定義了一個名叫屬性描述符的對象,用于描述了的各種特征。屬性描述符對象有4個屬性: configurable:可...
摘要:返回值被傳遞給函數的對象。描述該方法允許精確添加或修改對象的屬性。描述符必須是兩種形式之一不能同時是兩者。可以是任何有效的值數值,對象,函數等。該方法返回值被用作屬性值。該方法將接受唯一參數,并將該參數的新值分配給該屬性。 Object.defineProperties() Object.defineProperty() 方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現有屬性...
閱讀 3596·2020-12-03 17:42
閱讀 2768·2019-08-30 15:54
閱讀 2223·2019-08-30 15:44
閱讀 571·2019-08-30 14:08
閱讀 970·2019-08-30 14:00
閱讀 1103·2019-08-30 13:46
閱讀 2784·2019-08-29 18:33
閱讀 2886·2019-08-29 14:11