javascript屬性之get/set


var o  = { get x(){ return 7; }, set x(val){ console.info("不能設置x的值"); } } o.x //7 讀取x值的時候,會使用get方法
 o.x = 9  //不能設置x的值 賦值x時,會使用set方法

get/set與原型鏈


 

 

//不包含get/set的原型

function p(){} p.prototype.z = 9; var p1 = new p(); p1.z //9 //對象上沒有屬性,將在原型鏈上查找
 p1.z = 10;    //原型上不包含get/set方法時,向原型上的同名屬性賦值,會在對象上添加此屬性
 p1.z //10 //對象上能夠找到屬性,將不會在原型鏈上查找

 

//原型上包含get/set方法

function
person(){} Object.defineProperty(person.prototype,'z',{get:function(){return 1}}); var p = new person(); p.z //1 p.z = 89; p.z //
still 1 原型鏈上get/set方法,操作此屬性的時候,會向上查找原型鏈。 所以p.z仍舊是1
//那個問題來了,在原型鏈上有get/set方法的時候,怎么實現在對象上添加此屬性呢? 

function foo(){} Object.defineProperty(foo.prototype,'z',{get:function(){return 1}}) var f = new foo(); f.z //1
 f.z = 2; f.z //still 1
 Object.defineProperty(f,'z',{value:100,configurable:true,writable:true}); f.hasOwnProperty('z')  //true
 f.z //100
 f.z = 90; f.z //90

delete f.z  //true
 f.hasOwnProperty('z')   //false
 f.z //1 回到原型鏈查找

 


免責聲明!

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



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