Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Метод toString() в пользовательском компоненте и проблемы с ним (https://javascript.ru/forum/extjs/57614-metod-tostring-v-polzovatelskom-komponente-i-problemy-s-nim.html)

nohuhu 12.08.2015 21:15

Цитата:

Сообщение от khusamov (Сообщение 383757)
Где-то в недрах метода addListener

http://docs.sencha.com/extjs/5.1/5.1...od-addListener

происходит обращение к массиву, в качестве индекса используя SCOPE. Хотя SCOPE это вообще-то объект. Так ведь?

Не совсем так. scope может быть и строкой, а namedScopes это не массив, а объект.

Цитата:

У меня в некоторых компонентах есть метод toString(), который при таком обращении к массиву неявно вызывается.
Компонент - это объект JavaScript. Объекты JavaScript имеют нативный метод toString(), который возвращает "[object Object]". Эта конвенция соблюдается с момента появления JavaScript, и на неё закладывается не только Ext JS, а вообще практически любая сколько-нибудь серьёзная библиотека. Вы эту конвенцию нарушаете, переопределяя метод toString.

Цитата:

И теперь вопрос, что собственно делать-то???
Ваш код, вам и решать конечно. Я бы поменял название метода на что-нибудь другое, т.к. количество красоты и няшности от простого названия toString переоценено, а вот количество геморроя на свою голову из-за нарушения базовых конвенций очень сильно недооценивается.

Цитата:

У меня в итоге методы on() не работают.
Это ещё цветочки. Вам повезло, что эта проблема вылезла на относительно раннем этапе, в синхронном коде и в легко отлавливаемом виде. Могло быть гораздо хуже - и будет, если вы оставите всё как есть.

khusamov 13.08.2015 11:27

Нашел другую ошибку... Оказывается эта проблема всплывает, если метод toString() выдает пустой массив []. Тогда код:
namedScope = scope && namedScopes[scope];

генерирует ошибку Cannot convert object to primitive value

siber-biber 13.08.2015 11:53

я не понял у вас toString() возвращает НЕ строку?

khusamov 13.08.2015 12:37

угу... возвращал массив, из-за чего проблемы все и были


Часовой пояс GMT +3, время: 11:42.