Fork me on GitHub

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():判断对象是否可拓展
posted @ 2022-01-13 18:08  元芳啊  阅读(129)  评论(0编辑  收藏  举报