2014-11-12 4 views
0

Если я использую (в текстовом фрейме):получить все методы и свойства объекта

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

Тогда я не получаю подходящий метод либо. И я действительно хотел бы знать все методы и свойства выбранного объекта. Итак, как мне их получить?

ответ

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() на одном из этих способов его не перечислимых И не владеет свойством 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(/*...*/); 

Чтобы сделать его полным: Допустим, вы нашли .fit на прототипе OBJ в prot. Затем вы можете проверить его:

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

, который выводит объект, который показывает значение из prot.fit и является ли это перечислимы, записи и настраиваемый или нет. ObjectMethods и еще несколько FIND HERE.

1

Или просто используйте b.inspect(obj). Распечатывает все свойства и значения объекта рекурсивным образом на консоли. См. http://basiljs.ch/reference/#inspect

Смежные вопросы