簡體   English   中英

獲取對象的所有方法和屬性

[英]get all methods and properties of an object

如果我使用(在文本框架上):

b.selection().fit(FitOptions.frameToContent);

然后它將按預期工作,這意味着所選對象具有fit方法。

如果我使用:

for (var property in b.selection()) {
    b.println(property);
}

在同一選擇上,則不會打印出擬合方法。

如果我使用這個:

function getMethods(obj) {
  var result = [];
  for (var id in obj) {
    try {
      if (typeof(obj[id]) == "function") {
        result.push(id + ": " + obj[id].toString());
      }
    } catch (err) {
      result.push(id + ": inaccessible");
    }
  }
  return result;
}


b.println(getMethods(b.selection()));

然后我也沒有fit方法。 我真的很想知道所選對象的所有方法和屬性。 那我怎么得到它們呢?

當方法fit()存在並且在for-in-loop中不發光時,它是不可枚舉的屬性。

有多種訪問對象屬性的方法:

var obj = b.selection();
for (var p in obj) {
    console.log(p); // --> all enumerable properties of obj AND its prototype
}
Object.keys(obj).forEach(function(p) {
    console.log(p); // --> all enumerable OWN properties of obj, NOT of its prototype
});
Object.getOwnPropertyNames(obj).forEach(function(p) {
    console.log(p); // all enumerable AND non-enumerable OWN properties of obj, NOT of its prototype
});

如果您找不到以這種方式之一的.fit() ,它不是 obj的不可枚舉且 不是OWN屬性,而是位於obj 原型中的某個位置。 然后,您可以執行以下操作:

var prot = Object.getPrototypeOf(obj);
Object.getOwnPropertyNames(prot).forEach(function(pp) {
    console.log(pp); // --> all enumerable AND non-enumerable properties of obj's prototype
});

對象通常具有更長的原型鏈,並且該屬性位於其上的某個位置。 然后,您只需根據需要重復最后一個片段:

var prot2 = Object.getPrototypeOf(prot);
Object.getOwnPropertyNames(prot2).forEach( /*...*/ );

要使其完整:假設您在obj的原型prot上找到了.fit 然后您可以檢查它:

console.log(Object.getOwnPropertyDescriptor(prot.fit));

輸出的對象顯示prot.fit以及它是否可枚舉,可寫和可配置 該Object.methods和一些在這里找到

或者只是使用b.inspect(obj) 以遞歸方式將對象的所有屬性和值打印到控制台。 參見http://basiljs.ch/reference/#inspect

嘗試obj.reflect.methods獲取所有方法

暫無
暫無

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

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