Javascript 获取对象的所有方法和属性

Javascript 获取对象的所有方法和属性,javascript,adobe-indesign,basil.js,Javascript,Adobe Indesign,Basil.js,如果我使用(在文本框上): 然后,它会按预期工作,这意味着选定对象有一个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]) ==

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

然后,它会按预期工作,这意味着选定对象有一个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()
存在并且在
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( /*...*/ );
要使其完整:假设您在obj的原型
prot
上找到了
.fit
。然后你可以检查它:

console.log(Object.getOwnPropertyDescriptor(prot.fit));
它输出一个对象,该对象显示
prot.fit
的值,以及它是否可枚举、可写和可配置。Object.methods等。

当method
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( /*...*/ );
要使其完整:假设您在obj的原型
prot
上找到了
.fit
。然后你可以检查它:

console.log(Object.getOwnPropertyDescriptor(prot.fit));
它输出一个对象,该对象显示
prot.fit
的值,以及它是否可枚举、可写和可配置。Object.methods等。

当method
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( /*...*/ );
要使其完整:假设您在obj的原型
prot
上找到了
.fit
。然后你可以检查它:

console.log(Object.getOwnPropertyDescriptor(prot.fit));
它输出一个对象,该对象显示
prot.fit
的值,以及它是否可枚举、可写和可配置。Object.methods等。

当method
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( /*...*/ );
要使其完整:假设您在obj的原型
prot
上找到了
.fit
。然后你可以检查它:

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

它输出一个对象,该对象显示
prot.fit
的值,以及它是否可枚举、可写和可配置。Object.methods等等。

或直接使用
b.inspect(obj)
。以递归方式将对象的所有属性和值打印到控制台。请参见或仅使用
b.inspect(obj)
。以递归方式将对象的所有属性和值打印到控制台。请参见或仅使用
b.inspect(obj)
。以递归方式将对象的所有属性和值打印到控制台。请参见或仅使用
b.inspect(obj)
。以递归方式将对象的所有属性和值打印到控制台。参见

尝试
obj.reflect.methods
获取所有方法

尝试
obj.reflect.methods
获取所有方法

尝试
obj.reflect.methods
获取所有方法

尝试
obj.reflect.methods