javascript中的Object.defineProperty()与getOwnPropertyNames ()方法
来源:互联网 发布:上汽进出口 知乎 编辑:程序博客网 时间:2024/05/21 10:58
在接触javascript面向对象的高级部分时,我一下子傻缺了。我看的是《javascript高级程序设计》第三版,其中第六章讲到面向对象的程序设计。我想接触过java,php5等语言的小伙伴们,对面向对象那是再熟悉不过了。我也一样,带着那一套思维再来看javascript的面向对象,一开始还真有点陌生,难以理解。前面几章我看得很快,但到了第六章有点费解,我停了一下。 关于属性类型,访问器属性,我们先来看看他们的相关函数的定义,再结合书中的实例看看。
定义
Object.defineProperty()函数是给对象设置属性的。
Object.defineProperty(object, propertyname, descriptor);
参数descriptor有以下参数值:
Configurable: 总开关,一旦为false,就不能再设置他的(value,writable,configurable),表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。像前面例子中那样直接在对象上定义的属性,它们的这个特性默认值为:true。
Value :属性的值,默认为 undefined。
writable: 该属性是否可写,如果设置成 false,则任何对该属性改写的操作都无效(但不会报错,但是在严格模式下会报错。),对于像前面例子中直接在对象上定义的属性,这个属性该特性默认值为为 true。
enumerable:定义了对象的属性是否可以在 for…in 循环和 Object.keys() 中被枚举。
get: 对定义的属性取值的时候会触发get 对应的函数,并且返回结果,默认返回undefined。
set:对定义的属性赋值的时候会触发set 对应的函数
关于Configurable在上文中讲到总开关的事,在此我想结合《javascript高级程序设计》中的例子来测试一下:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title></title></head><body> <script type="text/javascript"> //定义一个空的对象 var person={}; //结合Object.defineProperty方法来定义属性名,以及给值 Object.defineProperty(person,"name",{ value:"Nicholas", configurable:false }); document.write(person.name); person.name="xiaohong"; document.write("<br>"); document.write(person.name); </script></body></html>
output:
Nicholas
Nicholas
看样是没错的,即使重新给属性name赋值,它还是输出同样的结果,结果没变。下面我们再看看给出writable的结果,这次上述代码基本没变,只是给出了一个writable.
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title></title></head><body> <script type="text/javascript"> //定义一个空的对象 var person={}; //结合Object.defineProperty方法来定义属性名,以及给值 Object.defineProperty(person,"name",{ value:"Nicholas", configurable:false, writable:true }); document.write(person.name); person.name="xiaohong"; document.write("<br>"); document.write(person.name); </script></body></html>
output:
Nicholas
xiaohong
其结果发生了改变,可见writable的级别要高于configurable,属性的值是否可读可写最关键取决于writable.
在网上查阅微软讲解的相关javascript的Object对象资料的时我还看到getOwnPropertyNames()方法,在此我想顺便也看一下getOwnPropertyNames()方法,我认为微软的资料讲得很好。
Object.getOwnPropertyNames定义
定义:返回对象自己的属性的名称。一个对象的自己的属性是指直接对该对象定义的属性,而不是从该对象的原型继承的属性。对象的属性包括字段(对象)和函数。
语法:
Object.getOwnPropertyNames(object)
参数表
接着我们再结合上面的例子,看看其方法的用法.
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title></title></head><body> <script type="text/javascript"> //定义一个空的对象 var person={}; //结合Object.defineProperty方法来定义属性名,以及给值 Object.defineProperty(person,"name",{ value:"Nicholas", configurable:false, writable:true }); document.write(person.name); document.write("<br>"); person.name="xiaohong"; var x=Object.getOwnPropertyNames(person); for(var i=0;i<x.length;i++){ var y=x[i]; document.write(y+":"+person[y]); } </script></body></html>
output:
Nicholas
name:xiaohong
出处:http://www.cnblogs.com/xinggood/p/6601067.html
https://msdn.microsoft.com/library/dd548687(v=vs.94).aspx
- javascript中的Object.defineProperty()与getOwnPropertyNames ()方法
- JavaScript中的Object.defineProperty 函数
- JavaScript Object.defineProperty()方法详解
- ECMA5中的Object.defineProperty()方法
- js中的Object.defineProperty方法
- Object.defineProperty 函数 (JavaScript)
- Object.defineProperty 函数 (JavaScript)
- Javascript Object.defineProperty()
- Object.defineProperty 函数 (JavaScript)
- 【JavaScript】 Object.defineProperty
- Object.defineProperty 函数 (JavaScript)
- Object.defineProperty方法
- Object.getOwnPropertyNames()
- JS中的双向数据绑定及Object.defineProperty方法
- JS中的双向数据绑定及Object.defineProperty方法
- JavaScript中Object.defineProperty()相关
- how to use javascript Object.defineProperty?
- 理解javascript的Object.defineProperty的作用
- Python 爬虫入门 1 了解爬虫Scrapy
- 大型系统开发经验谈
- ACM 蚂蚁问题
- Java中的值传递和地址传递(传值、传引用)
- Algorithms.8-3.STINGY SAT
- javascript中的Object.defineProperty()与getOwnPropertyNames ()方法
- MYSQL 存储过程
- 2016小米-懂二进制-Java
- linux 一台机器的并发量是咋确定的呢? 能接收多少并发estab数量
- 根据进程名判断进程是否运行
- java链接数据库插入数据中文乱码
- Makefile 入门
- VC模仿Rundll32.exe
- java中this关键字的基本使用