JavaScript:对象的三个属性
每一个对象都有与之相关的原型(prototype)、类(class)和可扩展性(extension attribute)。
原型 prototype
对象的原型属性是用来继承属性的。通过对象直接量创建的对象使用Object.prototype作为他们的原型。
在ES3中,可以使用 o.constructor.prototype 来检测一个对象的原型。
使用 isPrototypeOf() 方法可以检测一个对象是否是另一个对象的原型(或处于原型链中)。
var p = { x: 1 }; // 定义一个原型对象 var o = Object.create(p);// 使用这个原型创建一个对象 p.isPrototypeOf(o); // true,o继承自p Object.prototype.isPrototypeOf(o); // true,p继承自Object.prototype
类 class
类属性是一个字符串,用以表示对象的类型信息。使用 toString() 方法可以间接查询,返回的格式是 [Object class]。
function clasof(o) { if (o == null) { return "Null" } if (o == undefined) { return "Undefined" } return Object.prototype.toString().call(o).slice(8, -1) } classof(null) // "Null" classof(1) // "Number" classof(false) // "Boolean" classof("1") // "String" classof([]) // "Array" function F() { } classof(new F()) // "Object"
可扩展性 extension attribute
表示是否可以给对象添加新属性。可以将对象传入 Object.exExtensible()来判断这个对象是否可以扩展。
结尾:
以下是三个属性对比表格:
属性 | 作用信息 | 查找方法 |
原型属性(prototype) | 是用来继承属性的 | Object.getPrototypeOf():查询原型 |
类属性(class) | 类属性是一个字符串,表示对象的类型信息 | Object.prototype.toString() |
可扩展行(extension attribute) | 表示是否可以给对象添加新属性 | Object.exExtensible():判断对象是否可拓展 |
好好做人,认真生活。