3

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

dir(object) returns

object.height
object.width
object.compute_days_till_birthday()

etc.....
4

5 回答 5

4

Firebug 也有类似的功能

console.dir(obj)

或者你可以自己做一个

var dir = '';
for (var i in obj) dir += 'obj[' + i + '] = ' + obj[i];
alert(dir); 
于 2011-01-10T23:14:35.007 回答
4

是的。您可以使用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 或者你可能会)。

length当我说“可枚举”属性时:规范定义的对象的大多数内置属性(如Array实例或实例)都是不可枚举的getTime,并且不会显示在列表中。在规范的第 5 版之前,没有标准的方法来定义您自己的不可枚举属性,但最近您可以通过/来实现(规范的第 15.2.3.6 和 12.2.3.7 节)。这还没有得到广泛支持。DateObject.definePropertyObject.defineProperties

于 2011-01-10T23:15:00.157 回答
2
for ( var prop in obj ) {
   console.log( prop + ' is ' + obj[prop] );
}
于 2011-01-10T23:10:44.740 回答
1

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

替代文字

于 2011-01-10T23:15:49.727 回答
1

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).
于 2011-01-10T23:16:22.867 回答