• 对象的三个属性


      1.原型属性

      通过对象直接量创建的对象使用Object.prototype作为它们的原型;

      通过new创建的对象使用构造函数的prototype属性来作为它们的原型;

      通过Object.create()来创建的对象使用第一个参数作为它们的原型。

      在ECMAScript5中将对象作为参数传入Object.getPrototypeof()可查询它的原型;

      在ECMAScript3中没有与之等价的函数,但通常使用o.constructor.prototype来检测一个对象的原型。

      通过new创建的对象通常继承一个constructor属性,这个属性指代创建这个对象的构造函数。

      想要检测一个对象是否是另一个对象的原型(或处于原型链中),使用isPrototypeOf()。

      

    var p = {x:1,y:2};
    var o = Object.create(p);
    p.isPrototypeOf(o);//true
    Object.prototype.isPrototypeOf(o);//true

      2.类属性

      只能通过toString()这种间接的方法查询对象的类信息。该方法返回如下格式的字符串:

      [object class]

      提取返回的第八个和倒数第二个位置之间的字符即得到类信息。

      很多对象继承的toString方法被重写过,因此必须间接的调用Function.call()方法:

      

    function classOf(o){
    
        if(o === null) return "null";
        if(o === undefined) return "undefined";
        return Object.prototype.toString.call(o).slice(8,-1);
    }
    
    classOf([]);//Array
    
    classOf({});//Object
    
    classOf("");//String
    
    classOf(1);//Number
    
    classOf(true);//boolean
    
    classOf(window);//global
    
    function f(){};
    
    classOf(new f());//Object
    
    classOf(f);//Function

      3.可扩展性

      对象的可扩展性用以表示是否可以向对象添加新属性。Object.isExtensible()判断对象是否是可扩展的。Object.preventExtensions()可将对象转换为不可扩展的,一旦对象转换成不可扩展的了就不能转回可扩展的了。Object.seal()不仅可以将对象转换成不可扩展的,而且还将对象的所有自有属性设置为不可配置的。也就是说它已有的属性不能删除或配置,但它已有的可写属性依然可以配置。

      var o = Object.seal(Object.create(Object.freeze({x:1}),{y:{value:2,writable:true}}));//创建一个封闭对象,包括一个冻结的原型和一个不可枚举的属性

  • 相关阅读:
    在单向链表中删除指定的key
    双向链表反转
    单向链表反转
    认识异或运算
    二分查找
    插入排序
    冒泡排序
    选择排序
    go 语言环境安装
    欧几里得算法
  • 原文地址:https://www.cnblogs.com/rellame/p/5026098.html
Copyright © 2020-2023  润新知