[英]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.