2

以下のようなクラス定義が与えられるとRangeError: Maximum call stack size exceeded、オブジェクトが持つプロパティを確認しようとすると得られます。

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 に答える