JavaScript對象訪問器屬性


  對象訪問器就是setter和getter,他們的作用就是

    1. 提供另外一種方法來獲取或者設置對象的屬性值,
    2. 並且在獲取和設置的時候,可以用一定的其他操作。

  看下面代碼:

<script>
	var person = {
		_name : "abc",   //注意此處的_name有一個下划線
	};
	Object.defineProperty(person,"name",{ 
		//注意第二個參數的前面沒有下划線,所以_name和name是兩個不同的屬性
		set : function(value){
			this._name = "new name " + value;   
			//注意這里是給_name屬性賦值
		},
		get : function(){
			return "this is name get by function : " + this._name;  
			//注意這里是返回字符串加上_name的值
		}
	});
	//到這里,person於是就有了兩個屬性:_name和name屬性

	// 直接獲取_name屬性
	console.log(person._name);  //abc

	//通過name屬性來間接獲取_name的值,因為會執行name屬性的getter訪問器屬性(方法)
	console.log(person.name);   //this is name get by function : abc

	// 直接修改_name屬性
	person._name = "xyz";
	console.log(person._name);  //xyz

	//修改name屬性,但是name屬性的setter訪問器屬性(方法),會作用到_name屬性上
	person.name = "wtf"; 		//該字符串會在前面加上new name,然后在賦值給_name
	console.log(person._name);  //new name wtf
	console.log(person.name);	//this is name get by function : new name wtf
</script>

  看完代碼,你可能覺得setter和getter有點多余,直接使用原來的變量就能實現,為何要多此一舉?

  其實有些情況setter和getter很使用,比如在設置屬性的時候需要將屬性值做一些處理,當然這些處理可以在外部定義函數實現,也可以直接處理之后賦值,但是,使用setter和getter更加符合編程的思維,賦值或者獲取屬性值是不需要進行額外的操作,因為操作已經封裝了,並且對外部來說是透明的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM