在JavaScript中,他们是检查对象方法和属性(例如python的dir())的一种方式? [复制

StackOverflow https://stackoverflow.com/questions/4652559

  •  09-10-2019
  •  | 
  •  

这个问题在这里已经有一个答案:

在JavaScript中,他们是检查对象方法和属性的一种方法,例如Python的dir()?

dir(object) returns

object.height
object.width
object.compute_days_till_birthday()

etc.....
有帮助吗?

解决方案

firebug有类似的功能

console.dir(obj)

或者你可以自己做一个

var dir = '';
for (var i in obj) dir += 'obj[' + i + '] = ' + obj[i];
alert(dir); 

其他提示

是的。您可以使用 for..in 循环(第12.6.4节 规格),通过对象及其原型的枚举特性(如果有一个)循环,则像:

var name;
for (name in obj) {
    // `name` is each of the property names, as a string; get the value
    // from obj[name]
    alert(name + "=" + obj[name]);
}

如果您想区分是否是对象本身或具有属性的原型,则可以使用 obj.hasOwnProperty:

var name;
for (name in obj) {
    if (obj.hasOwnProperty(name)) {
       // `name` is the name of a property this object has for itself
    }
    else {
       // `name` is the name of a property the object inherits
       // from its prototype
    }
}

如果您使用的是支持一些新的实现 eCMAScript 5 东西,你可以使用 Object.keys 要获取其所有枚举的属性名称的数组,但实际上只是一个数组版本 for..in 给你(和 for..in 我见过或您可能会看到的每一次JavaScript的实现都支持。

当我说“枚举”属性时:规范定义的对象的大多数内置属性(如 lengthArray 实例,或 getTimeDate 实例) 不可能 并且不要出现在列表中。直到规格的第五版,没有标准的方式来定义您的 自己的 不可能的属性,但最新的属性可以通过 Object.defineProperty / Object.defineProperties (规格的第15.2.3.6和12.2.3.7节)。这还没有得到广泛支持。

for ( var prop in obj ) {
   console.log( prop + ' is ' + obj[prop] );
}

JavaScript有 for .. in 循环构造可以帮助这一点:

for (var name in some_object) {
    // some_object[name] is the value of the property
}

但是,这种方法有一些陷阱:

  1. 对象属性可以是 任何 类型。如果您需要过滤要检索的列表,则需要使用 typeof.
  2. for .. in 会迭代从目标对象的原型链中撤出的属性。如果要仅处理目标对象本身上定义的属性,则应额外测试 some_object.hasOwnProperty(name).

尝试使用Chrome的控制台。如果您使用任何类型的变量使用 console.log(), ,它使您可以探索其所有方法和属性,包括原型链。看起来像这样:

alt text

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top