属性类型

数据属性 - 包含一个数据值的位置,可以读取和写入值

[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 | 数据属性与访问器属性的更多相关文章

  1. JavaScript 数据属性和访问器属性

    在JavaScript中对象被定义为"无序属性的集合,其属性可以包含基本值.对象或函数."通俗点讲,我们可以把对象理解为一组一组的名值对,其中值可以是数据或函数. 创建自定义对象通 ...

  2. JavaScript数据属性与访问器属性

    ES5中对象的属性可以分为‘数据属性’和‘访问器属性’两种. 数据属性一般用于存储数据数值,访问器属性对应的是set/get操作,不能直接存储数据值. 数据属性特性:value.writable.en ...

  3. 浅谈Javascript数据属性与访问器属性

    ES5中对象的属性可以分为‘数据属性’和‘访问器属性’两种. 数据属性一般用于存储数据数值,访问器属性对应的是set/get操作,不能直接存储数据值. 数据属性特性:value.writable.en ...

  4. javascript数据属性和访问器属性

    var book={ _year:2004, edition:1};Object.defineProperty(book,"year",{ get:function(){ retu ...

  5. JavaScript 属性类型(数据属性和访问器属性)

    数据属性 数据属性包含一个数据值的位置.在这个位置可以读取和写入值.数据属性有 4 个描述其行为的特性. [[Configurable]]:表示能否通过 delete 删除属性从而重新定义属性,能否修 ...

  6. javascript对象属性——数据属性和访问器属性

    ECMA-262第五版在定义时,描述了属性property的各种特征,定义这些特性是为了实现javascript引擎用的,为了表示该特性是内部值,规范把它们放在了两对儿方括号中,例如[[Enumera ...

  7. JavaScript中的数据属性和访问器属性

    在学习JavaScript原型(prototype)和原型链(prototype chain)知识的时候,发现数据属性和访问器属性的重要性,通过不断的查找相关知识,浅显理解如下,若有差错,希望不吝赐教 ...

  8. Js中的数据属性和访问器属性

    Js中的数据属性和访问器属性 在javaScript中,对象的属性分为两种类型:数据属性和访问器属性. 一.数据属性 1.数据属性:它包含的是一个数据值的位置,在这可以对数据值进行读写. 2.数据属性 ...

  9. js中属性类型:数据属性与访问器属性

    js中属性类型分为两种:数据属性和访问器属性 在js中,对象都是由名值对构成的,名:就是我们所说的属性名,值就是属性对应的值(基本值.对象.方法). ECMA-262第5版定义了只有内部才用的特性,描 ...

随机推荐

  1. DBCS 从256开始

    ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是一套基于拉丁字母的字符编码,共收录了 128 个字符,用一个字 ...

  2. shell 指定行插入

    #如果知道行号可以用下面的方法 sed -i '88 r b.file' a.file    #在a.txt的第88行插入文件b.txt awk '1;NR==88{system("cat ...

  3. VB 中DTpicker日期控件的运用

    1.如何加载 VB默认的控件栏中是没有DTpicker日期控件的,添加过程:工具--部件--控件--"Microsoft  Windows Common Controls-2.6.0&quo ...

  4. [USACO 2017 Dec Gold] Tutorial

    Link: USACO 2017 Dec Gold 传送门 A: 为了保证复杂度明显是从终结点往回退 结果一开始全在想优化建边$dfs$……其实可以不用建边直接$multiset$找可行边跑$bfs$ ...

  5. [Lydsy1806月赛] 超速摄像头

    题面在这里! 可以证明只要叶子两两路径满足条件即可,于是便可以贪心啦,从最外圈(叶子)开始一层一层选,选出前 k/2 层. 如果k是奇数的话,还可以多选一个不是前 k/2 层的点. #include& ...

  6. I/O多路复用机制:epoll

    在过去的linux 网络编程中,采用select来做事件触发,其缺点在于每次调用select,都需要把fd集合拷贝到内核,内核必须遍历传递进来的所有fd,这在fd很多时开销会很大,相比于select, ...

  7. 一段javascript设计模式应用场景

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  8. Manthan, Codefest 16 B. A Trivial Problem 二分 数学

    B. A Trivial Problem 题目连接: http://www.codeforces.com/contest/633/problem/B Description Mr. Santa ask ...

  9. Xcode9出现错误safe area layout guide before ios 9 真正解决办法

    网上很多解决办法瞎扯淡,以讹传讹之势愈演愈烈. 正解是选中控制器,右边面板的Builds for 选择iOS9.0 and Later,如下图红框广为流传的错解是不勾选Use Safe Area La ...

  10. Linux自定义应用程序及其菜单图标

    在Linux桌面系统中,如果需要自己添加一个应用程序,如果是标准的bin, lib, share结构,我通常将其放在/usr/local/bin中.如果非这样,或者程序文件很多,易造成Linux系统目 ...