如果我使用(在文本框架上):
b.selection().fit(FitOptions.frameToContent);
然后它按预期工作,这意味着所选对象具有拟合方法。
如果我使用:
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()));
然后我也没有得到合适的方法。我真的想知道所选对象的所有方法和属性。那我怎么得到它们呢?
答案 0 :(得分:1)
如果方法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()
其不可枚举且不是OWN 属性的obj,而是位于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的原型.fit
上找到prot
。然后你可以检查它:
console.log(Object.getOwnPropertyDescriptor(prot.fit));
输出一个对象,显示prot.fit
的值以及它是否可枚举,可写和可配置。 Object.methods以及更多FIND HERE。
答案 1 :(得分:1)
或者只使用b.inspect(obj)
。以递归方式将对象的所有属性和值打印到控制台。见http://basiljs.ch/reference/#inspect
答案 2 :(得分:1)
尝试obj.reflect.methods
获取所有方法