JS的数据属性和访问器属性

字数 365阅读 73

在高程这本书里面,介绍了ECMA的两种属性:数据属性和访问器属性

两种属性包含的东西不再赘述和解释

只能通过对象方法访问的属性前缀为下划线(说实话真没看出来怎么就只能通过对象方法访问了)

例:

var book={

_year:2017,edition:1

};

Object.defineProperty(book,"year",{

get: function(){return this._year;},

set: function(newValue){

if(newValue>2017){

this._year=newValue;

this.edition+=newValue-2017;

}

}

});

console.log(book.year,book._year)//2017 2017

发现输出数据属性year和访问器属性_year都是可行的。

但是当对数据进行改变时,又会怎么样呢?我们预期是希望edition随着year更新。

book._year=2018;

console.log(book.year,book._year,book.edition)//2018 2018 1

book.year=2018;

console.log(book.year,book._year,book.edition)//2018 2018 2

可以看到通过访问器属性的set函数,edition按照我们所想那样变动了,省得自己再手动设置editon;而直接设置数据属性,则麻烦了点。

基本上,可以把访问器属性当作一个doorkeeper,它把形如_year等属性保护起来,你要找_year的时候,给访问器过目一下,他不但把你要找的东西给你找出来,还顺便给了你售后服务。这比你直接吆喝来丢三落四好多了是吧。

推荐阅读更多精彩内容