首页 新闻 会员 周边

JS中对象属性问题

0
悬赏园豆:50 [待解决问题]

最近在看书js高级程序设计时,看到了对象的属性类型,下面的代码还是可以看懂的:

<script type="text/javascript">
//用面向字面量的方式创建一个book对象
var book={_year:2000,edition:0};
//调用Object.defineProperties(对象名,要添加的属性)方法,为对象一次定义多个属性(1.数据属性)(2.访问器属性)
Object.defineProperties(book,{
//添加的两个数据属性(_year,edition)
_year:{//(_year)前面的下划线表示只能通过对象方法访问的属性
value:2004,
},
edition:{
value:1,
},
//添加了访问器属性(year)
year:{
//调用get方法读取属性
get:function(){
return this._year;
},
//调用set方法写入属性
set:function(newValue){
if (newValue>2004) {
this._year=newValue;
this.edition+=(newValue-2004);
}
}
}
});
console.log(book.year); //2004
console.log(book._year); //2004
//测试
book.year=2008;//访问器属性常见方式,设置一个属性的值会导致其他属性发生变化
console.log(book.year); //2008
console.log(book.edition); //5
</script>

但是 如果一开始声明 空对象 var book={}; 然后通过Object.defineProperties()的方法设置属性
var book={}; //空对象
Object.defineProperties(book,{
year: {
value:2004,
},
edition: {
value: 1
},
year:{
get: function(){
return this._year;
},
set: function(newValue){
if(newValue > 2004){
this._year = newValue;
this.edition += newValue-2004;
}
}
}
});
console.log(book.year); //undefined
console.log(book._year); //undefined
console.log(book.edition); //
for(var k in book){
console.log(k); //什么也没有
}

book.year = 2008;
console.log(book.year); //2008
for(var k in book){
console.log(k); //_year
}
console.log(book.edition); //1

如果把year: {
value:2004,
},
改为 _year: {
value:2004,
},

那么输出一下:
console.log(book.year); //2004
console.log(book._year); //2004
console.log(book.edition); // 1
for(var k in book){
console.log(k); //什么也没有
}

book.year = 2008;
console.log(book.year); //2008
for(var k in book){
console.log(k); //什么也没有
}
console.log(book.edition); //1

找了很多资料都没搞明白为什么,求大神帮忙解答一下

没有翅膀的脚的主页 没有翅膀的脚 | 初学一级 | 园豆:58
提问于:2019-04-14 13:46
< >
分享
所有回答(1)
0

book是个对象,能这样循环?

每天都要学一点 | 园豆:169 (初学一级) | 2019-04-29 15:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册