• JavaScript中的对象


    对象的三个相关特性

    1 原型对象

    2 对象的类

    3 对象的可拓展性

    三类Js对象及两类属性

    1 内置对象

    2 宿主对象

    3 自定义对象

    4 自有属性

    5 继承属性

    思考:以上的概念是否清楚?

    创建对象的方式

    //对象直接量
    var a={x:1}
    //通过new创建对象,a()是一个函数调用,new a()实际是及创建了一个继承自a()的对象
    var a=new a();
    //通过Object对象的静态方法
    Object.create()

    思考1:以上3个方法如何创建空对象?

    思考2:我们如何在实现一个静态函数?

    经典代码 :通过原型继承创建一个新对象

    function inherit(p){
        if(p===null) throw TypeError;
        if(Object.create){
            return Object.create(p);
        }
        var t=typeof p;
        if(t!=='object'&&t!=='function')   throw TypeError;
        function f(){}
        f.prototype=p;
        return new f();
    }

    查询对象的两种方式:. 及[" "] ,[" "]与for in 循环配合使用,for in 循环的是对象中可枚举的自有属性及继承属性

    JavaScript对象都是关联数组,只不过每一项的下标不是数字而是属性名

    访问对象属性的一种简写

    var len=book && book.subtitle && book.subtitle.length

    &&运算符除了返回true,false外,还会返回真假值,当运算符左侧的值为真时,返回值为右侧的值,以此类推

    删除属性

    delete 属性时需要循环遍历属性中的属性,防止内存泄漏

    deiete 不能删除不可配置的属性

    检测属性

    三个方法

    in  //自有属性+继承属性
    
    hasOwnProperty() //自有属性
    
    propertyIsEnumerable() //自有属性+可枚举属性

    存储器属性

    var p={
        x:1,
        get r()  {return x},
        set r(value)  {this.x=value}
    }

    属性的特性

    数据属性的4个特性:value(值),writeable(可写),enumerable(可枚举),configurable(可配置)

    存储器属性的4个特性:get(读取),set(写入),enumerable(可枚举),configurable(可配置)

    获取对象属性特性的方法

    Object.getOwnPropertyDescriptor(object,propertyName)

    设置对象属性特性的方法

    Object.defineProperty(object,propertyName,{
        value: 1,
        writeable: true,
        enumerable: true,
        configurable: true
    })
    Object.defineProperties(object,{
    param1:{
    value:,
    writeable:,
    enumerable:,
    configurable:
    },
    param2...
    })

    一个经典的继承函数

    Object.defineProperty(Object.prototype,'extend',{
        value:function(o){
            var names=Object.getOwnPropertyNames(o);//得到对象的所有自有属性,包括不可枚举的属性 Object.keys() 获取对象的自有属性
            for(var i=0;i<names.length;i++){
                if(names[i] in this) continue;
                var desc=Object.getOwnPropertyDescription(o,names[i]);
                Object.defineProperty(this,names[i],desc);
            }
        }
    })

    检测对象原型的方法

    Object.getPrototypeOf()获取一个对象的原型

    __proto__属性用于查询/设置对象的原型

    查询对象的类

    一个经典的方法

    function classof(o){
        if(o===null) return 'Null';
        if(o===undefined) return 'Undefined';
        return Object.prototype.toString.call(o).slice(8,-1);
    }

    对象的可扩展性

    三个方法

    Object.preventExtensions();//对象不可扩展
    
    Object.seal();//对象不可扩展+属性不可配置
    
    Object.freeze();//对象不可扩展+属性不可配置+只读(不包括存储器属性的setter方法)

    对象的序列化

    JSON.stringify() //只能序列化对象可枚举的自有属性
  • 相关阅读:
    Javascript
    CSS3新增特性HTML标签类型
    HTML5新增的标签
    prototype __proto__ Function
    oninput
    extend
    hasOwnProperty()
    this prototype constructor
    Array类型判断
    指针
  • 原文地址:https://www.cnblogs.com/goOtter/p/9327942.html
Copyright © 2020-2023  润新知