JavaScript | 数据属性与访问器属性
属性类型
数据属性 - 包含一个数据值的位置,可以读取和写入值
|
[writable] |
是否能修改属性的值 |
true |
|
[enumerable] |
是否通过for in 循环返回属性(是否可以被枚举) |
true |
|
[configurable] |
是否能通过delete删除,能否修改属性的特性,能否修改访问器属性 |
true |
|
[value] |
包含这个属性的数据值,读取属性值的时候从这个位置读取。 |
undefined |
访问器属性
|
[enumerable] |
是否通过for in 循环返回属性(是否可以被枚举) |
true |
|
[configurable] |
是否能通过delete删除,能否修改属性的特性,能否修改访问器属性 |
true |
|
[get] |
读取属性时调用的函数 |
undefined |
|
[set] |
写入属性时调用的函数 |
undefined |
属性操作
- 定义属性:Object.defineProperty()
- 查看属性:Object.getOwnPropertyDescriptor()
"use strict";
// *****************************************************************
// 操作数据属性
var person = {
name: 'hugh',
age: 29,
sayName: function() { console.log(1); }
}
// 修改属性默认特性:Object.defineProperty()
Object.defineProperty(person, "name", {
writable: true,
value: 'dong',
configurable: false,
enumerable: false
});
console.log(person); // *****************************************************************
// 操作访问器属性
var book = {
_year: 2004, // _作为标记只能通过对象访问的属性
edition: 0
};
Object.defineProperty(book, "year", {
// 访问器属性year包含setter和getter函数
get: function() {
return this._year;
},
set: function(newValue) {
this._year = newValue;
this.edition = newValue - 2004;
}
})
book.year = 2008;
console.log(book);
console.log(book.edition);
// 旧方法,ie8部分不支持defineProperty()
// 严格模式不可用
// book._defineGetter_("year",function(){
// return this._year;
// });
// book._defineSetter_("year",function(newValue){
// this._year = newValue;
// this.edition = newValue - 2014;
// }); // *****************************************************************
// 定义多个属性
var book2 = {};
Object.defineProperties(book2, {
// 数据属性
_year: {
value: 2004,
writable: false,
enumerable: false,
configurable: true
},
edition: {
value: 0,
writable: false,
enumerable: false,
configurable: true
},
// 访问器属性
year: {
get: function() {
return this._year;
},
set: function(newValue) {
this._year = newValue;
this.edition = newValue - 3000;
}
}
});
console.log(book2); // *****************************************************************
// 查看属性的属性
console.log(Object.getOwnPropertyDescriptor(book2,'_year'));
console.log(Object.getOwnPropertyDescriptor(book2,'edition'));
console.log(Object.getOwnPropertyDescriptor(book2,'year'));

JavaScript | 数据属性与访问器属性的更多相关文章
- JavaScript 数据属性和访问器属性
在JavaScript中对象被定义为"无序属性的集合,其属性可以包含基本值.对象或函数."通俗点讲,我们可以把对象理解为一组一组的名值对,其中值可以是数据或函数. 创建自定义对象通 ...
- JavaScript数据属性与访问器属性
ES5中对象的属性可以分为‘数据属性’和‘访问器属性’两种. 数据属性一般用于存储数据数值,访问器属性对应的是set/get操作,不能直接存储数据值. 数据属性特性:value.writable.en ...
- 浅谈Javascript数据属性与访问器属性
ES5中对象的属性可以分为‘数据属性’和‘访问器属性’两种. 数据属性一般用于存储数据数值,访问器属性对应的是set/get操作,不能直接存储数据值. 数据属性特性:value.writable.en ...
- javascript数据属性和访问器属性
var book={ _year:2004, edition:1};Object.defineProperty(book,"year",{ get:function(){ retu ...
- JavaScript 属性类型(数据属性和访问器属性)
数据属性 数据属性包含一个数据值的位置.在这个位置可以读取和写入值.数据属性有 4 个描述其行为的特性. [[Configurable]]:表示能否通过 delete 删除属性从而重新定义属性,能否修 ...
- javascript对象属性——数据属性和访问器属性
ECMA-262第五版在定义时,描述了属性property的各种特征,定义这些特性是为了实现javascript引擎用的,为了表示该特性是内部值,规范把它们放在了两对儿方括号中,例如[[Enumera ...
- JavaScript中的数据属性和访问器属性
在学习JavaScript原型(prototype)和原型链(prototype chain)知识的时候,发现数据属性和访问器属性的重要性,通过不断的查找相关知识,浅显理解如下,若有差错,希望不吝赐教 ...
- Js中的数据属性和访问器属性
Js中的数据属性和访问器属性 在javaScript中,对象的属性分为两种类型:数据属性和访问器属性. 一.数据属性 1.数据属性:它包含的是一个数据值的位置,在这可以对数据值进行读写. 2.数据属性 ...
- js中属性类型:数据属性与访问器属性
js中属性类型分为两种:数据属性和访问器属性 在js中,对象都是由名值对构成的,名:就是我们所说的属性名,值就是属性对应的值(基本值.对象.方法). ECMA-262第5版定义了只有内部才用的特性,描 ...
随机推荐
- zabbix主机自动发现
环境说明 角色 主机名 IP zabbix-server c1.heboan.com 192.168.88.1 zabbix-agent c2.heboan.com 192.168.88.2 zabb ...
- 【BZOJ 2212】【POI 2011】Tree Rotations
http://www.lydsy.com/JudgeOnline/problem.php?id=2212 自下而上贪心. 需要用权值线段树来记录一个权值区间内的出现次数. 合并线段树时统计逆序对的信息 ...
- 【DFS】奇怪的电梯
奇怪的电梯 题目描述 有一天桐桐做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1≤i≤N)上有一个数字K:(0≤Ki≤N).电梯只有四 个按钮:开,关,上,下.上下的层 ...
- Java程序运行时内存划分
1.Java程序跨平台运行的原因 主要原因是:各种平台的JVM和字节码文件 Java源程序--具体平台的机器代码文件---被编译器翻译成平台无关的Class文件,又用特定JVM运行字节码文件,JVM在 ...
- ORACLE启动 切换实例命令
启动服务器的其他实例 export ORACLE_SID=数据库实例名 sqlplus /nolog conn /as sysdba select name from v$database; !lsn ...
- NHibernate官方文档中文版——批量插入(Batch inserts)
A naive approach t7o inserting 100 000 rows in the database using NHibernate might look like this: 一 ...
- 让SignalR客户端回调支持强类型
几天写一个小程序的时候用到了SignalR,发现现在SingalR Server 支持强类型了,也就是说,我们可以定义一个客户端的通知契约: public interface IClient { ...
- TDiocpCoderTcpServer 使用
TDiocpCoderTcpServer 使用 uses diocp_coder_tcpServer,utils_zipTools,diocp_tcp_server,diocp_task // 创建T ...
- .net中的泛型
泛型把类或方法的类型的确定推迟到实例化该类或方法的时候 ,也就是说刚开始声明是不指定类型,等到要使用(实例化)时再指定类型 泛型可以用于 类.方法.委托.事件等 下面先写一个简单的泛型 public ...
- Linux makefile 教程
转自:http://blog.csdn.net/liang13664759/article/details/1771246 最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指 ...