JavaScript对象——对象属性

来源:互联网 发布:新浪博客怎么seo 编辑:程序博客网 时间:2024/05/29 10:13

对象属性

属性类型

JavaScript中有三种不同类型的对象属性:命名数据属性、命名访问器属性以及内部属性。

var person={name:keency,get age(){},set age(){} }var book={_year:2004,edition:1}Object.defineProperty(book,"year",{    get:function(){        return this._year;    },    set:function(newValue){        this._year=newValue;    }});

(1)命名数据属性:name、edition

(2)命名访问器属性:age、_year
下划线用于表示只能通过对象方法访问的属性。

(3)内部属性:[[prototype]] 、[[class]]、 [[extensible]]

extensible用于定义对象上的属性是否可添加。
①preventExtensions(obj) 设置属性不可添加。
②Object.seal(obj)除执行preventExtensions(obj)将所有属性的configurable设置为false。
③Object.freeze(obj)在Object.seal(obj)的基础上将所有属性的writable设置为false。

属性特性

特性 含义 特点 configurable 是否可配置 设置configurable为false后只能将writable由true变为false writable 是否可写 enumerable 是否可枚举 当设置该属性特性为false后使用for in遍历不出该属性 value 属性的值 get 属性 存储着getter set 属性 存储着setter

添加属性

给对象添加属性可直接赋值也可使用defineProperty方法。
直接赋值的特殊情况:
①原型链上有该属性的set方法
直接赋值添加属性不成功,因为调用了原型链上的set
②原型链上该属性的writable为false
以上只能通过defineProperty(对象,属性,属性的特性)来给对象添加属性。

删除属性

删除对象属性可以使用delete(configurable为true的情况下)。

属性操作常用函数

Object.defineProperty(obj,newDataProperty: { writable: false })//defineProperty,如果不指定属性特性,默认configurable、enumerable和writable特性都为falseObject.defineProperty(a,"b",{      value:123    })Object.defineProperties(obj, {    newDataProperty: { writable: false },    newAccessorProperty: { enumerable: false },    anotherDataProperty: { value: "abc" }});Object.getOwnPropertyDescriptor(obj,"属性名");Object.getOwnPropertyDescriptors(obj);//获取所有属性的描述obj.hasOwnProperty("属性名");hasPrototypeProperty(obj,"属性名");//查找该属性是否在原型对象中
0 0
原创粉丝点击