getter: 讀取物件屬性時將被呼叫的函式。
setter:設定物件屬性時被呼叫的函式。
有以下4中方式可以使用 setter 和 getter:
使用get/set關鍵字為屬性新增乙個函式,函式名即為屬性名,get函式不傳參,set函式傳入的引數為設定物件的新值。
例如:
var person = ,
set name(newname) }
// 測試
person.name // ''
person.name = 'john' // 'john', 此時 person._name 也變成了 'john'
object.defineproperty() 方法直接在乙個物件上定義乙個新屬性,或者修改乙個已經存在的屬性, 並返回這個物件。
語法:
object.defineproperty(obj, prop, descriptor)
引數:
obj:
需要定義屬性的物件。
prop:
需被定義或修改的屬性名。
descriptor:
需被定義或修改的屬性的描述符。
var person = {}
var name = ''
object.defineproperty(person, 'name', ,
set: function(newname) })
// 測試
person.name // undefind
person.name = 'john' // 'john',此時全域性的 name 也變成了 'john'
在乙個物件上新增或修改乙個或多個自由屬性。
用法類似object.defineproperty()
語法
object.defineproperties(obj, props)
引數
obj:
將要被新增屬性或修改屬性的物件
props: 該物件的乙個或多個鍵值對定義了將要為物件新增或修改的屬性的具體配置
var obj = ;
object.defineproperties(obj,,
set:function(val)
},"b":,
set:function(val)
}});
//測試
obj.a; //2
obj.b; // "string2"
obj.a = 3;
obj.b = "hello";
obj.a; // 4
obj.b; // "hello2"
object.create() 方法建立乙個擁有指定原型和若干個指定屬性的物件。即提供新建立的物件的__proto__。
語法
object.create(proto, [ propertiesobject ])
引數
proto:新建立物件的原型物件
propertiesobject:可選。新建立物件的可列舉屬性物件的屬性描述符以及相應的屬性名稱,這些屬性對應object.defineproperties()的第二個引數。
var o = null;
o = object.create(object.prototype,//指定原型為 object.prototype
,set : function (val)
}}//第二個引數
);//測試
o.bar; //10
o.bar = 12; // 控制台列印出:"setting `o.bar` to 12"
如果你希望物件屬性值只能讀取不能被修改,那麼可以不設定set函式。
目前流行的框架vue的響應式系統就是利用object.defineproperty() 設定getter/setter來追蹤資料變化,從而導致檢視更新。
setter和getter記憶體處理
person.m import person.h implementation person 析構函式 void dealloc 建構函式 id initwithname nsstring name score nsarray score return self void setname nsstr...
setter方法和getter方法
oc是一門物件導向的語言,物件導向的語言有三大特性,就是封裝性,繼承性和多型性.類的資料與功能的封裝,資料就是成員變數,功能就是類方法或者物件方法,對資料的封裝,也就是對成員變數的封裝,封裝就是把資料隱藏起來,只能用此類的方法才可以讀取或者設定資料,不可被外部任意修改是物件導向設計本質,降低了資料被...
getter 和 setter的運用
1 set 有且僅有乙個引數 2 get不允許有任何引數 var obj set有且僅有乙個引數 setc value 不允許有任何引數 getc setinterval function 16 如果僅有set,沒有get,這個屬性就是只寫屬性 如果僅有get,沒有set,這個屬性就是乙個唯讀屬性 ...