簡體   English   中英

列出 Javascript Object 的所有原型屬性

[英]List All Prototype Properties of a Javascript Object

有沒有其他方法可以查找 javascript object 的原型屬性。假設我有這樣的。

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));

返回 ["property1", "property2"]

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

返回 ["property1", "property2"]

但我要打印的是 object my_object 的原型屬性。

['樣本 1', '樣本 2']

為了讓我看到 object 的原型屬性,我需要 console.log(object) 並從開發人員工具中查找 object 的屬性。

但由於我使用的是第三方庫,如 phaser.js、react.js、create.js,所以我不知道從該庫創建的 object 的原型屬性列表。

是否有 Object 的原型 function 列出 8822996504788 object 的所有原型屬性?

不是原型方法,但是可以使用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"
function prototypeProperties(obj) {
  var result = [];
  for (var prop in obj) {
    if (!obj.hasOwnProperty(prop)) {
      result.push(prop);
    }
  }
  return result;
}

編輯:這將獲取在任何祖先上定義的所有屬性。 如果要對定義在何處的內容進行更細粒度的控制,Bergi的建議是好的。

快速而骯臟的單線解決方案是:

console.log(Object.getOwnPropertyNames(Object.getPrototypeOf({ prop1: 'val1' })))

如果您想要更精確的信息,請撥打 go 並提供公認的答案!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM