对象的三个属性

  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}}));//创建一个封闭对象,包括一个冻结的原型和一个不可枚举的属性

时间: 2024-08-23 02:36:09

对象的三个属性的相关文章

《JS权威指南学习总结--6.8对象的三个属性》

内容要点: 每一个对象都有与之相关的原型(prototype).类(class)和可扩展性 一.原型属性 1.对象的原型属性是用来继承属性的,这个属性是如此重要,以至于我们经常把 "0的原型属性"直接叫做"o的原型". 2.原型的属性是在实例对象创建之初就设置好的:通过对象直接量创建的对象使用Object.prototype作为它们的原型.通过new创建的对象使用构造函数的prototype属性作为它们的原型.通过Object.create()创建的对象使用第一个参

Array对象的三种属性实例

length 属性 定义和用法 length 属性可设置或返回数组中元素的数目.这个很常见了 语法 arrayObject.length prototype 属性 定义和用法 prototype 属性使您有能力向对象添加属性和方法. 语法 object.prototype.name=value 实例 在本例中,我们将展示如何使用 prototype 属性来向对象添加属性: 1 <script type="text/javascript"> 2 //构造函数 3 functi

Ajax XMLHttpRequest对象的三个属性以及open和send方法

(1)onreadystatechange 属性onreadystatechange 属性存有处理服务器响应的函数.下面的代码定义一个空的函数,可同时对 onreadystatechange 属性进行设置: xmlHttp.onreadystatechange=function(){// 我们需要在这里写一些代码}(2)readyState 属性readyState 属性存有服务器响应的状态信息.每当 readyState 改变时,onreadystatechange 函数就会被执行. 这是 r

java:Hibernate框架(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态)

1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configurati

对象相关的——————三个属性

先罗列下: prototype 原型 class 类 extensible attribute  可扩展属性 prototype 属性: prototype 大概回顾下,从创建方式着手, 字面量创建的对象其原型为 Object.prototype,create() 创建的其原型指向第一个参数给定对象;  如果通过构造函数创建的其 指向 构造函数 prototype 属性指向的对象. protptype 原型主要是用来继承属性以及方法. 那我们怎么来查找和设置原型对象尼? ECMAScript3中

关于hibernate中对象的三种状态分析

一,首先hibernate中对象的状态有三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate().get().load():持久态到瞬态的方法有delete():游离态到持久态的方法有update().saveOrUpdate().lock():持久态到游离态的方法有:session.close().session.evict().session.clear(). 二,Hibernate的状态 hibernate的

WCF入门教程(三)属性标签

属性标签,成为定义协议的主要方式.先将最简单的标签进行简单介绍,以了解他们的功能以及使用规则. 服务协定标识,标识哪些接口是服务协定,哪些操作时服务协定的一部分,以及传输对象的定义.如果已经有所了解,请直接PASS. 1.ServiceContract(服务协定) 全名:System.ServiceModel.ServiceContractAttribute 功能:指示接口或类在应用程序中定义服务协定. 简单一句话:标识此接口是否是服务协定,是否需要公开为服务. 详细:使用接口(或类)上的 Se

hibernate中对象的三种状态分析

一,首先hibernate中对象的状态有 三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate(). get().load():持久态到瞬态的方法有delete():游离态到持久态的方法有update().saveOrUpdate(). lock():持久态到游离态的方法有:session.close().session.evict().session.clear(). 二,Hibernate的状态 hiberna

PHP5中public, private, protected 三种类属性的区别

初学PHP,看到别人的封装的类中有这三个属性,于是查找了相关资料总结了三者的区别如下:   在子类中可以通过self::var 或self::method 来调用 ,可以通过parent::method来调用父类中的方法,但不能调用公有属性. 在实例中可以通过$obj->var或self::method 来调用 protected: 受保护类型 在子类中可以通过self::var 或self::method调用, 可以通过parent::method来调用父类中的方法在实例中不能通过$obj->