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,"属性名");//查找该属性是否在原型对象中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值