在javascript中,物件的屬性分為資料屬性與記憶體屬性兩種:
兩種屬性的差別
我們使用Object.defineProperty()先來直覺的感受一下這兩者的差異。
使用Object.defineProperty()設定資料屬性的方法如下
var obj = {}; Object.defineProperty(obj, "prop", { value: 1, writable: true, //可写性 enumerable: true, //可枚举性 configurable: true //设置该属性是否能被删除,以及enumerable属性是否可以被修改 })
使用Object.defineProperty()對記憶體屬性的設定方法如下
var obj = {}; Object.defineProperty(obj, "prop", { get set enumerable: true, //可枚举性 configurable: true //设置该属性是否能被删除,以及enumerable属性是否可以被修改 })
從上面的範例中,我們觀察到記憶體屬性並沒有value和writable兩個屬性,取而代之的是set和get屬性。
記憶體屬性
看完了資料屬性和記憶體屬性直覺上的差異,我們詳細看一看記憶體屬性這個容易會被忽略(說的就是我TT)的屬性。
記憶體屬性與資料屬性最大的不同就是增加了getter/setter,透過它們可以對屬性的值進行操作,可以實現一些實用的功能。
//example1 function serialnum() { var n =1; var prop = null; Object.defineProperty(this, "n", { get: function() { return n; }, set: function(value) { if(value > n) n = value; else throw '请输入一个大于n的值'; } }) } var obj = new serialnum(); obj.n = 2; //2 obj.n = 0; //Uncaught 请输入一个大于n的值
上面的範例中,使用set函數對n的取值範圍進行控制。
關於js資料屬性儲存屬性小編就跟大家介紹到這裡,希望對大家有幫助!