首页 > 代码库 > 高程第六章--面向对象程序设计--属性类型
高程第六章--面向对象程序设计--属性类型
ES有两种属性类型:数据属性和访问器属性。
一、数据属性4个描述其行为的特性。
1:[[Configurable]]:表示能否通过delete删除属性从而重新定义属性。
2: [[Enumerable]]:表示能否通过for-in循环返回属性
3: [[Writable]]:表示能否修改属性的值
4:[[Value]]:包含这个属性的属性值
要修改属性默认的特性,必须使用ES5的defineProperty()方法
//"use strict";var person = {};Object.defineProperty(person,‘name‘,{ writable:false,//表示能否修改属性的值为true的话可以修改 默认false value:"Nicholas"});console.log(person.name);//Nicholasperson.name = "Grey";//严格模式下会报错console.log(person.name);//Nicholas true的情况下"Grey"
// "use strict";var person = {};Object.defineProperty(person,‘name‘,{ configurable:true,//表示不能删除对象中的属性 默认为true value:"Nicholas"});console.log(person.name);//Nicholasdelete person.name;//严格模式下会报错console.log(person.name);//Nicholas
//"use strict";var person = {};Object.defineProperty(person,‘name‘,{ configurable:false,//表示不能删除对象中的属性 value:"Nicholas"});//抛出错误Object.defineProperty(person,‘name‘,{ configurable:true,//一旦把属性定义为不可配置,就不能再把他变回可配置 value:"Nicholas"});
二:访问器属性 不包含数据值,他们包含一对getter和setter函数 但是不是必须的
1:[[Configurable]]:表示能否通过delete删除属性从而重新定义属性。
2: [[Enumerable]]:表示能否通过for-in循环返回属性
3: [[Get]]:在读取属性时调用的函数。默认为undefined。
4: [[Set]]:在写入属性时调用的函数。默认值为undefined。
访问器属性不能直接定义,必须使用Object.defineProperty()来定义、
var book = { _year:2004, edition:1};Object.defineProperty(book,‘year‘,{ get:function(){ return this._year; }, set:function(newValue){ if (newValue>2004) { this._year = newValue; this.edition += newValue - 2004; } }})book.year = 2005;console.log(book.edition);//2
_year前面的下划线是一种常用的记号,用于表示对象方法访问的属性。而访问器属性year则包含一个getter和setter的函数。getter函数返回_year的值。而setter函数通过计算来确定正确的版本。
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 } } } })var descriptor = Object.getOwnPropertyDescriptor(book,"_year");//数据属性console.log(descriptor.value);//2004console.log(descriptor.configurable);//falseconsole.log(descriptor.get);//underfinedvar descriptor = Object.getOwnPropertyDescriptor(book,"year");//访问器属性console.log(descriptor.value);//underfinedconsole.log(descriptor.enumerable);//falseconsole.log(descriptor.get);//[Function: get]
高程第六章--面向对象程序设计--属性类型
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。