Javascript权威指南笔记-对象

对象的对象特性

  • 对象的原型,指向另一个对象,本对象的属性继承自他的原型对象
  • 对象的类,标识一个对象类型的字符串
  • 对象的扩展标记,指明是否可以向该对象添加新属性

创建对象

  • 对象直接量 对象直接量是一个表达式,这个表达式的每次运算都会创建并初始化一个新的对象。
  • 通过new创建
  • 原型
  • Object.create()创建(es5)
var o1 = Object.create({x:1,y:2}) // o1继承了属性x和y
console.log(o1.x)                 // 1     
复制代码

若传入null,则创建一个没有原型的对象

继承

假设要查询对象o的属性x,如果o中不存在x,那么将会在o的原型对象中查询属性x,如果原型对象中也没有x,但这个原型对象也有原型,那么继续在这个原型对象上执行查询,直到找到x或者查到一个原型是null的对象为止。(原型链)

function inherit(o){
    if (o == null)  throw TypeError()
    if (Object.create) {
        return Object.create(o)
    }
    var t = typeof o
    if ( t == 'object' && t !== 'function' ) throw TypeError
    function f(){}
    f.prototype = o
    return new f()
}
复制代码

删除属性

delete运算符只是断开属性和宿主对象的联系,而不是去操作属性中的属性。只能删除自有属性,不能删除继承属性。

检测属性

  • in运算符
  • hasOwnProperty() 属性是否是自由属性,继承属性返回false
  • propertyIsEnumerable() 是自由属性并且是可以枚举的

枚举属性

对象继承的内置方法是不可以枚举的,但是在代码中给对象添加的属性都是可以枚举的 用for/in可以遍历枚举属性

  • Object.keys() 返回一个数组,是由对象中可枚举的自有属性的名称组成。
  • Object.getOwnPropeytyNames() 返回对象的所有自有属性的名称

setter 和 getter

es5中,对象的属性可以用一个或两个方法代替,就是getter和getter。由 getter和setter定义的属性称为“存储器属性”。他不同于数据属性,数据属性只是一个简单的值。

    var o = {
        // 普通的数据属性
        data_prop: value,

        // 存储器属性都是成对定义的函数
        get accessor_prop(value) { 
            this.data_prop = value
        },
        set accessor_prop() { 
            return this.data_prop
        }
    }
复制代码

存储器属性也是可以继承的

属性的特性

  • 数据属性的特性:值,可写性,可枚举,可配置
  • 存储器属性的特性:读取,写入,可枚举性和可配置性 利用 Object.getOwnPropertyDescriptor()可以获取属性描述符的对象(自有属性的)

设置属性的特性: Object.defineProperty()

    var 0 = {}
    Object.defineProperty(o,"x",{
        vaule: 1,
        writable: true,
        enumerable: false,
        configurable: true
    })
复制代码

设置多个属性特性:

var p = Object.defineProperties,{
    x: { value: 1, writable: true,... }
    // 存储器属性
    r : {
        get: function() { return ... }
        enumberable: true,
        ...
    }
})
复制代码

转载于:https://juejin.im/post/5aaa79d26fb9a028cc60f51c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值