<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
/* 对象中 属性 方法 又是属性又是方法 */
let obj = {
_a:1,
/* get 属性名(){ return } 没有参数 必须使用return返回对应的值*/
get a(){
return this._a
},
/* set 属性名(参数){} 注意:这个参数有且仅有一个 */
set a(val){
this._a += val;
this.b += val;
this.d += val;
},
b:100,
d:100,
c(val){
this.b+=val;
this.d+=val;
}
}
/*
属性可以设置 也可以获取 就是用来存储的变量 不能执行多条语句
方法不能存储值 也不能获取值 可以执行后返回值 可以执行多条语句
希望在设置值时 执行多条语句
*/
// console.log(obj)
// obj.c(100)
// console.log(obj.b,obj.d);
obj.a = 100;//这样在设置a的值的时候 就会执行set方法并将100作为参数 set a(100) 的方法
// console.log(obj.b,obj.d);
// console.log(obj.a)//obj.a没有写赋值 获取a的值 会执行get方法 执行get a(){}
/*
如果一个属性 只有set 无get =》 只能设置不能获取
只有get 无set =》 只能获取不能设置 只读
*/
let obj1 = {
_a:10,
get a(){
return 1000
}
}
obj1.a = 199//无法设置 只读属性
// console.log(obj1.a);
/* ---------------在已有的对象中添加set和get-----------------
invoke property getter
调用属性getter*/
Object.defineProperty(obj1,'b',{
/* 在使用set/get时,不能使用writable,value */
get(){
return this._a;
},
set(val){
this._a = val;
}
})
obj1.b = 199;
console.log(obj1);
</script>
</body>
</html>
es6 中 setter/getter 访问器属性
最新推荐文章于 2023-08-28 16:08:05 发布