标签:
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}}));//创建一个封闭对象,包括一个冻结的原型和一个不可枚举的属性
标签:
原文地址:http://www.cnblogs.com/rellame/p/5026098.html