浅谈JavaScript 数据属性和访问器属性(2)

属性前面的下划线表示只能通过对象方法访问的属性。当我们使用person.name时实际上调用的是name属性的getter函数,为person.name赋值时调用的是name属性的setter函数,这样属性和访问器之间的关系就很清晰了。

定义多个属性

实际上ES5为我们提供了为一个对象定义多个属性的方法,即Object.defineProperties(),该函数接收两个参数,属性所在的对象以及需要修改的属性及其描述符对象组成的对象,例如把上边的例子修改为一次性定义多个属性,如下:

var person = { _name: "Scott", _age: 24, _tel: 86247 }; Object.defineProperties(person,{ name:{ get: function(){ return this._name; } }, age:{ set: function(p){ this._age = p; } }, tel:{ get:function(){ return this._tel; }, set: function(p){ this._tel = p; } } });

读取属性的特性

ES5提供了Object.getOwnPropertyDescripter()方法来获取给定属性的描述符。该方法接收两个参数:属性所在的对象和要读取其描述符的属性名称。结果会返回一个对象,如果是访问器属性,返回的对象有configuable、enumerable、get和set;如果是数据属性,这个返回对象的属性包括configuable、enumerable、writable和value。对于上面的例如,使用如下:

var person = { _name: "Scott", _age: 24, _tel: 86247 }; Object.defineProperties(person,{ name:{ get: function(){ return this._name; } }, age:{ set: function(p){ this._age = p; } }, tel:{ get:function(){ return this._tel; }, set: function(p){ this._tel = p; } } }); var descripter = Object.getOwnPropertyDescripter(person,"tel"); console.log(descripter.value); //undefined console.log(descripter.enumerable); //false console.log(typeof descripter.get); //"function"

上面的代码中获取了person对象的tel属性,由于其是一个访问器属性,所以其value为undefined,enumerable为false,而get为指向getter函数的一个指针。

以上这篇浅谈JavaScript 数据属性和访问器属性就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzfgxj.html