对象原型中的属性及作用

2018-05-16  本文已影响0人  多年0以后
  1. 所有对象的proto(对象隐式原型)均指向自身构造函数的prototype(函数显示原型)

  2. constructor 属性指向构造函数本身Object()

  3. hasOwnProperty方法检测对象自身是否包含某属性(传入属性名字符串)
    本方法区别于in运算符, 只能检测对象自有属性(in运算符可以检测到继承属性)

  4. isPrototypeOf方法检测对象自身是否处于另一个对象(参数对象)的原型链上
    本方法区别于instanceOf运算符 (instanceOf运算符检测对象是否是一个类的实例)

  5. propertyIsEnumerable方法检测对象的某属性是否可以被枚举到(for in),此方
    法 只检测自有属性,继承属性统一返回false。事实上部分预定义继承属性和自定
    义的 继承属性如没有使用属性描述符(ES5)限制其可枚举性,它们都是可以被
    for in 循环枚 举到的。

  6. 特殊属性

    • 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
  }); 
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
上一篇 下一篇

猜你喜欢

热点阅读