javascript中的Object.defineProperty()与getOwnPropertyNames ()方法
2017-06-30 22:55
761 查看
在接触javascript面向对象的高级部分时,我一下子傻缺了。我看的是《javascript高级程序设计》第三版,其中第六章讲到面向对象的程序设计。我想接触过java,php5等语言的小伙伴们,对面向对象那是再熟悉不过了。我也一样,带着那一套思维再来看javascript的面向对象,一开始还真有点陌生,难以理解。前面几章我看得很快,但到了第六章有点费解,我停了一下。 关于属性类型,访问器属性,我们先来看看他们的相关函数的定义,再结合书中的实例看看。
定义
Object.defineProperty()函数是给对象设置属性的。Object.defineProperty(object, propertyname, descriptor);
参数 | 描述 |
---|---|
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)
参数表
参数 | 定义 |
---|---|
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中in操作符(for..in)、Object.keys()和Object.getOwnPropertyNames()的区别
- JavaScript Object.defineProperty()方法详解
- JavaScript使用Object.defineProperty方法实现双数据绑定
- JavaScript Object.defineProperty()方法详解
- ES6 Symbol及对象遍历方法for in,Object,keys,JSON.stringify,getOwnPropertyNames,Reflect.ownKeys
- JavaScript中in操作符(for..in)、Object.keys()和Object.getOwnPropertyNames()的区别
- Javascript研究: 遍历对象的方式Object.getOwnPropertyNames vs Object.keys vs for ...in
- javascript面向对象的程序设计之Object.getOwnPropertyDescriptor()
- Object.defineProperty 函数 (JavaScript)
- how to use javascript Object.defineProperty?
- 面试题:(考察Object.defineProperty(obj,prop,descriptor) 的get方法)
- es6 javascript的对象Object.getOwnPropertyDescriptors()
- Difference between Object.keys() and Object.getOwnPropertyNames()
- javascript面向对象之Object.defineProperty(a,b,c)
- JS中的双向数据绑定及Object.defineProperty方法
- Javascript中对象的Obeject.defineProperty()方法-------------(ES5/个人理解)
- Javascript 对象不支持此属性或方法,Object doesn’t support this property or method
- Object.getOwnPropertyNames和Object.keys
- JS Object.getOwnPropertyDescriptor()和Object.defineProperty()
- Object.defineProperty 函数 (JavaScript)