javascript属性之get/set

本文详细介绍了JavaScript中get和set方法的应用,包括如何阻止属性值的更改及在原型链中的行为。通过具体示例展示了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  回到原型链查找

 

转载于:https://www.cnblogs.com/dsitn/p/7074238.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值