首页 文章

列出Javascript对象的所有原型属性

提问于
浏览
12

有没有其他方法来查找javascript对象的原型属性 . 让我说我喜欢这个 .

function proton() {
    this.property1 = undefined;
    this.property2 = undefined;
};

proton.prototype = {

    sample1 : function() {
        return 'something';
    },

    sample2 : function() {
        return 'something';
    }

};

var my_object = new proton();

console.log(Object.keys(my_object));

return [“property1”,“property2”]

console.log(Object.getOwnPropertyNames(my_object));

return [“property1”,“property2”]

但我想要打印的是对象my_object的原型属性 .

['sample1','sample2']

为了让我看到我需要console.log(对象)的对象的原型属性,我可以从开发人员工具中查找该对象的属性 .

但由于我使用的是第三方库,如phaser.js,react.js,create.js,所以我不知道这个库中创建对象的原型属性列表 .

是否有任何Object的原型函数列出javascript对象的所有prototpye属性?

2 回答

  • 27

    不是原型方法,但您可以使用Object.getPrototypeOf遍历原型链,然后获取每个对象的属性名称 .

    function logAllProperties(obj) {
         if (obj == null) return; // recursive approach
         console.log(Object.getOwnPropertyNames(obj));
         logAllProperties(Object.getPrototypeOf(obj));
    }
    logAllProperties(my_object);
    

    使用它,您还可以编写一个函数,返回所有属性名称的数组:

    function props(obj) {
        var p = [];
        for (; obj != null; obj = Object.getPrototypeOf(obj)) {
            var op = Object.getOwnPropertyNames(obj);
            for (var i=0; i<op.length; i++)
                if (p.indexOf(op[i]) == -1)
                     p.push(op[i]);
        }
        return p;
    }
    console.log(props(my_object)); // ["property1", "property2", "sample1", "sample2", "constructor", "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable"
    
  • 7
    function prototypeProperties(obj) {
      var result = [];
      for (var prop in obj) {
        if (!obj.hasOwnProperty(prop)) {
          result.push(prop);
        }
      }
      return result;
    }
    

    编辑:这将获取在任何祖先上定义的所有属性 . 如果你想更精细地控制定义的位置,Bergi的建议是好的 .

相关问题