2

给定如下的类定义,我RangeError: Maximum call stack size exceeded在尝试查看 Object 具有哪些属性时得到。

var Person = (function () {
    function Person(name, age) {
        this.name = name;
        this.age = age;
    }
    Person.prototype.inspect = function () {
        console.log(this);
    };
    return Person;
})();

var radek = new Person("Radek", 28);
radek.inspect();

在浏览器(Chrome)中,我们将得到以下内容:

Person {name: "Radek", age: 28, inspect: function}
4

1 回答 1

3

有趣的是你应该问。默认情况下inspect(),定义在被检查对象上的自定义函数将在我们尝试检查它们时被调用。在我们的例子中,这导致了一个没有尽头的递归。

为了在保留名称的同时缓解问题,请使用将util额外选项传递给customInspect的模块inspect()

var util = require("util");

var Person = (function () {
    function Person(name, age) {
        this.name = name;
        this.age = age;
    }
    Person.prototype.inspect = function () {
        console.log(util.inspect(this, { 'customInspect': false }));
    };
    return Person;
})();

var radek = new Person("Radek", 28);
radek.inspect();

这将为我们提供以下信息:

{ name: 'Radek', age: 28 }

于 2013-06-21T19:11:22.847 回答