一、访问器属性:

  1、Configurable:表示能否通过delete删除属性,从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性。对于直接在对象上定义的属性,这个特性的默认值为true,表示可以使用delete删除该属性;对于使用Object.defineProperty方式定义的属性,这个特性默认值是false,表示不能使用delete删除该属性。

  举例:

var obj = {};
Object.defineProperty(obj,'name',{
value : '何莉莉'
});
obj.age='23'; delete obj.name;//返回值false,严格模式下会报错,属性不会被正常删除。
delete obj.age;//返回值true,属性可以被正常删除。

  2、Enumerable:表示能否通过for - in 循环返回属性。对于直接在对象上定义的属性,这个特性的默认值为true,表示可以使用for - in循环返回属性;对于使用Object.defineProperty方式定义的属性,这个特性的默认值为false,表示不能使用for - in 循环返回属性。

for(one in obj){
console.log(one+": "+obj[one]);
}
//结果中不包含使用Object.defineProperty定义的name属性结果
//age: 23

  3.get:在读取属性时调用的函数。默认值undefined。

  4.set:在写入属性时调用的函数。默认值undefined。

//下面以类似的双向绑定为例,表明给属性赋值时候,如何使用set和get方法。
var obj = {
temp : '',
array : [],
push : function(val){
this.temp = val;
}
}; Object.defineProperty(obj,'temp',{
set:function(val){
obj.array.push(val);
},
   get:function(){
     return obj.array;
   }
}); obj.push("亲");
obj.push("爱");
obj.push("的");
obj.push("你");
//结果
obj.array;//直接从对象中获取
obj.temp;//走get方法

二、定义多个属性

  ECMAScript5定义了一个Object.definPropertis()方法。利用此方法可以通过描述符一次定义多个属性。这个方法接受两个对象参数:第一个对象是添加和修改其属性的对象,第二个对象的属性与第一个对象中要添加或修改的属性一一对应。

例如:

var book = {};
Object.defineProperties(book,{
_year:{
writable : true,
value : 2004
},
edition:{
writable:true,
value:1
},
year:{
get:function(){
return this._year;
},
set:function(newValue){
if(newValue > 2004){
this._year = newValue;
this.edition += newValue - 2004;
}
}
} });
//结果:

三、读取属性的四个特性

var remote = Object.getOwnPropertyDescriptor(book,'_year');

for(var node in remote){

    console.log(node + ":" + remote[node]);

}

//结果

 
 

JavaScript的访问器的更多相关文章

  1. 24 JavaScript对象访问器&JavaScript对象构造器

    ES5引入了Getter和Setter Getter和Setter允许定义对象访问器 JavaScript Getter(get关键字):获取对象属性 <script> var perso ...

  2. JavaScript对象访问器属性

    对象访问器就是setter和getter,他们的作用就是 提供另外一种方法来获取或者设置对象的属性值, 并且在获取和设置的时候,可以用一定的其他操作. 看下面代码: <script> va ...

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

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

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

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

  5. JavaScript中的Get和Set访问器

    今天要和大家分享的是JavaScript中的Get和Set访问器,和C#中的访问器非常相似. 标准的Get和Set访问器的实现   function Field(val){       this.va ...

  6. JavaScript ECAMScript5 新特性——get/set访问器

    之前对get/set的理解一直有误,觉得get set 是对象属性方法.看了别人的博客也有很多疑问,今天系统的做了很多测试终于弄明白了.(自己通过看书和写demo测试的,如有不对欢迎大家批评指正) g ...

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

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

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

    ECMA-2把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.” 严格来说,这就相当于说对象是一组没有特定顺序的值.对象的属性或方法都有一个名字,而每个名字映射到一个值.我们可以把E ...

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

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

随机推荐

  1. 017 Linux 之啥是 ssh ?

    1 什么是 ssh?有什么用? (1)ssh 是一种协议 SSH(Secure Shell) 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议,利用 SSH 协议可以有效防止远程管理过程中的信 ...

  2. Docker仓库--registry与harbor

      搭建私有仓库的两种方式: Registry Harbor  一.registry的搭建 docker官方提供了一个搭建私有仓库的镜像registry,只需下载镜像,运行容器并暴露5000端口即可. ...

  3. [杂记]BrainFuck语言及编译器(c++实现)

    BrainFuck语言 极简的一种图灵完备的语言,由Urban Müller在1993年创造,由八个指令组成(如下表).工作机制与图灵机非常相似,有一条足够长的纸带,初始时纸带上的每一格都是0,有一个 ...

  4. [旧][Android] 消息处理机制

    备注 原发表于2016.06.06,资料已过时,仅作备份,谨慎参考 概述 Android 的消息处理机制主要是指 Handler 的运行机制以及 Handler 所附带的 MessageQueue 和 ...

  5. 【C#TAP 异步编程】构造函数 OOP

    原文:异步 OOP 2:构造函数 (stephencleary.com) 异步构造带来了一个有趣的问题.能够在构造函数中使用会很有用,但这意味着构造函数必须返回一个表示将来将构造的值,而不是构造的值. ...

  6. Java -- int与String相互转换

    int转换为String 使用Integer的静态方法 Integer.toString(int num); 空值会抛出NullPointerException异常 使用String的静态方法 Str ...

  7. POJ2112题解

    题目大意:K个挤奶机,C头牛,每个挤奶机最多可以接待M头牛,各个K,C之间可能有道路连接,要让每个牛都找到挤奶机,求最小的走的路程最远的牛所需走的距离. 思路:首先看到要最小化最大值,所以需要二分.可 ...

  8. Scrapy(五):Response与Request、数据提取、Selector、Pipeline

    学习自Requests and Responses - Scrapy 2.5.0 documentation Request在Spider中生成,被Downloader执行,之后会得到网页的Respo ...

  9. el-dialog设置为点击弹窗以外的区域不自动关闭弹窗

    两种方法:单个设置或者全局设置 第一种:(单个设置) 在el-dialog标签中添加:close-on-click-modal="false"即可 <el-dialog ti ...

  10. LeetCode-268-丢失的数字

    丢失的数字 题目描述:给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数. 进阶: 你能否实现线性时间复杂度.仅使用额外常数空间的算法解 ...