-
所有对象的proto(对象隐式原型)均指向自身构造函数的prototype(函数显示原型)
-
constructor 属性指向构造函数本身Object()
-
hasOwnProperty方法检测对象自身是否包含某属性(传入属性名字符串)
本方法区别于in运算符, 只能检测对象自有属性(in运算符可以检测到继承属性) -
isPrototypeOf方法检测对象自身是否处于另一个对象(参数对象)的原型链上
本方法区别于instanceOf运算符 (instanceOf运算符检测对象是否是一个类的实例) -
propertyIsEnumerable方法检测对象的某属性是否可以被枚举到(for in),此方
法 只检测自有属性,继承属性统一返回false。事实上部分预定义继承属性和自定
义的 继承属性如没有使用属性描述符(ES5)限制其可枚举性,它们都是可以被
for in 循环枚 举到的。 -
特殊属性
- defineGetter defineSetter 非标准的方法(ES6 已经标准化)用来定义对象的属性的存取器
- 标准方法 Object.defineProperty(obj, propertyName, configObj) 为对象添加属性并定义属性描述符
- 数据属性 value, writable, enumerable,configurable
- 存取器属性 get, set, enumerable,configurable
o.a = 1;
// 等同于 :
Object.defineProperty(o, "a", {
value : 1,
writable : true,
configurable : true,
enumerable : true
});
// 另一方面,
Object.defineProperty(o, "a", { value : 1 });
// 等同于 :
Object.defineProperty(o, "a", {
value : 1,
writable : false,
configurable : false,
enumerable : false
});
-
lookupGetter lookupSetter 非标准方法 (ES6 已经标准化)
用来获取对象属性的存取器,包括对象自身和原型中的属性,原型中的存取器属性
是可以被继承的,在查找属性存取器时,对象的自有同名属性与原型中的同名属性
会被同时查找(区别于获取value时自身同名属性覆盖原型同名属性的情况) - 标准方法 Object.getOwnPropertyDescriptor(obj, propertyName) 此方法获取的是属性的描述符对象(描述符对象中可以获取属性的存取器),
var obj = {
get foo() {
return Math.random() > 0.5 ? "foo" : "bar";
}
};
Object.getOwnPropertyDescriptor(obj, "foo").get
//返回
function (){return Math.random() > 0.5 ? "foo" : "bar"}
//此方法只能获取自有属性的属性描述符,对于继承属性需使用getPrototypeOf()
var obj = {};
var prototype = Object.getPrototypeOf(obj);
Object.getOwnPropertyDescriptor(prototype, "foo").get
网友评论