Как динамически установить имя функции / объекта в Javascript, как оно отображается в Chrome - PullRequest
38 голосов
/ 03 мая 2011

Это то, что меня беспокоило отладчиком Google Chrome, и мне было интересно, есть ли способ решить эту проблему.

Я работаю над большим Javascript-приложением, использующим множество объектно-ориентированных JS (использующих Joose framework), и когда я отлаживаю свой код, все мои классы получают бессмысленные инициалы отображаемое значение. Чтобы понять, что я имею в виду, попробуйте это в консоли Chrome:

var F = function () {};
var myObj = new F();

console.log(myObj);

Вывод должен быть одной строкой, которую вы можете развернуть, чтобы увидеть все свойства myObj, но первое, что вы видите, это просто ▶ F.

Моя проблема в том, что из-за моей структуры OO, каждый экземпляр объекта получает одно и то же имя . Код, который выглядит так, отвечает за это так:

getMutableCopy : function (object) {
    var f = function () {};
    f.prototype = object;
    return new f();
}

Это означает, что в отладчике начальное представление всегда равно ▶ f.

Теперь я действительно не хочу ничего менять в как Joose создает объекты (getMutableCopy ...?) , но если бы было что-то, что я мог бы добавить к этому чтобы я мог назвать свое имя, это было бы здорово.

Некоторые вещи, на которые я смотрел, но никуда не попал:

> function foo {}
> foo.name
  "foo"
> foo.name = "bar"
  "bar"
> foo.name
  "foo"    // <-- looks like it is read only

Ответы [ 11 ]

0 голосов
/ 05 мая 2011

обычно вы используете window[name], как

var name ="bar"; 
window["foo"+name] = "bam!"; 
foobar; // "bam!"

, что приведет вас к такой функции, как:

function getmc (object, name) { 

    window[name] = function () {}; 
    window[name].prototype = object; 
    return new window[name](); 

}

, но затем

foo = function(){}; 
foobar = getmc(foo, "bar"); 
foobar; // ▶ window
foobar.name; // foo
x = new bar; x.name; // foo .. not even nija'ing the parameter works

и с тех порВы не можете проверить оператор возврата (eval("return new name()");), я думаю, что вы застряли

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...