JavaScript对象——对象属性

对象属性

属性类型

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特性都为false
Object.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,"属性名");//查找该属性是否在原型对象中

你可能感兴趣的:(JavaScript,javascript,对象)