Javascript学习笔记——6.8 对象的三个属性

2018-05-03  本文已影响0人  IFELSE

每一个对象都有与之相关的原型(prototype),类(class)和可扩展性(extensible attribute).

原型属性

对象的原型属性是用来继承属性的.我们经常把对象的原型属性简称为对象的原型.

获取对象的原型属性 Object.getPrototypeOf()

检测一个对象是否在另一个对象的原型链中,使用isPrototypeOf()

var p = {name:'Mike',age:18}
var p1 = Object.create(p)
p.isPrototypeOf(p1) //true

类属性

对象的类属性是一个字符串,表示对象的类型信息.但是ECMA5并未提供设置这个属性的方法,而且只能通过toString()并截取第8个到倒数第2个字符的方式间接的查询它.但很多对象的toString方法重写了,所以得调用Function.call()方法实现.以下函数可以获取class

//获取对象类属性的函数
function classof(o){
  if(o===null) return 'Null'
  if(o===undefined) return 'Undefined'
  return Object.prototype.toString.call(o).slice(8,-1)
}

可扩展性

对象的可扩展性表示是否可以给对象添加新属性.所有的内置对象和自定义对象都是可扩展的,除非修改它们的可扩展属性.可扩展性的目的是将对象锁定,避免外界的干扰.

preventExtensions()只影响对象本身的可扩展性.如果给一个不可扩展的对象的原型添加属性,这个不可扩展对象同样会继承新添加的属性.

封闭对象

冻结对象

Object.preventExtensions() Object.seal() Object.freeze()都返回传入的对象,所以可以嵌套使用.

上一篇 下一篇

猜你喜欢

热点阅读