javascript学习笔记——Object
javascript object 对象
所有其他对象都继承自object。(1,'1'这类的整数、字符串不是对象,但是在解析的时候会自动被封装成对应的原型对象实例)
b = new Object(a),如果a是一个对象,则a===b, 如果a不是对象,则b是a的包装对象(如 数字1的包装对象new Number(1))。
所有的构造函数(可以理解为类)都有一个prototype属性,指向一个原型对象。所有实例共享prototype上的属性和方法,这个要跟static区分开,JavaScript里也有static关键字,非静态方法中调用static申明的函数需要使用类名或this.constructor调用,但是在static 方法的内部可以使用this调用静态方法。静态方法可以被子类重写
静态方法:
Object.keys(),只返回可枚举的属性 //这俩方法可以计算对象属性个数
Object.getOwnPropertyNames() 返回可枚举和不可枚举的属性(不可枚举的属性如数组的length)
Object.getOwnPropertyDescriptor(obj,propertyKey)
:获取某个属性的attributes
对象。输出的结果是对象属性的权限:configurable: true enumerable: true value: [123] writable: true __proto__: Object
Object.defineProperty(
:通过obj,propertyKey
,propertyDescriptor
)attributes
对象,定义某个属性。Object.defineProperties()
:通过attributes
对象,定义多个属性。Object.getOwnPropertyNames()
:返回直接定义在某个对象上面的全部属性的名称。//数组格式,Object.getOwnPropertyNames("abc") //["0", "1", "2", "length"]
Object.preventExtensions()
:防止对象扩展。//不能添加新属性Object.isExtensible()
:判断对象是否可扩展。Object.seal()
:禁止对象配置。 //不能添加新属性,所有已有属性变得不可配置,不能配置属性的权限,不可删除属性,可以修改属性的值,不能将属性的值从定义为方法Object.isSealed()
:判断一个对象是否可配置。Object.freeze()
:冻结一个对象。Object.isFrozen()
:判断一个对象是否被冻结。
Object.create()
:该方法可以指定原型对象和属性,返回一个新的对象。Object.getPrototypeOf()
:获取对象的Prototype
对象。获取对象的原型(Object|Number|String)
Object对象的实例方法
valueOf()
:返回当前对象对应的值。//在运算的时候自动类型转换会调用,可重写var b = 1; var c = '1'; console.log(b.valueOf(), c.valueOf()); b.x = 11;//b其实是个数字,调用函数的时候被转换为了对象,调用完成后就被销毁了 console.log("b.x:", b);
//输出结果:
1 "1"
b.x: 1toString()
:返回当前对象对应的字符串形式。//可重写(数组、字符串、函数、Date都重写了自己的方法)
对于原型已经重写了toString,可以使用Object.prototype.toString.call(obj)调用Object的toString()方法,返回结果为[object,String|Number|Array|etc]
toLocaleString()
:返回当前对象对应的本地字符串形式。hasOwnProperty()
:判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性。isPrototypeOf()
:判断当前对象是否为另一个对象的原型。//两个对象原型是否相等propertyIsEnumerable()
:判断某个属性是否可枚举。