Показать сообщение отдельно
  #6 (permalink)  
Старый 31.07.2012, 22:45
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от imissyouso
Следовательно всё что toString не сможет найти в test, будет искать в прототипе и там должен найти, потому что он ссылается на обект типа String. По логике же должно работать.
Это неправильно. Такая особенности работы функции String.prototype.toString, что она принимает только строки и объекты String, и не принимает даже наследников объектов String (которые сами не являются объектами String).
Сообщение от imissyouso
Делаю дамп объекта test и вижу что внешне у него такая же структура как и у любого объекта типа String. Наверное только внешне?
Да. Только внешне. test является объектом класса Object, как показывает
Object.prototype.toString.call(test)

а объекты String имеют класс String. У test нет, в отличии от объектов класса String, своего внутреннего строкового значения.
Сообщение от imissyouso
Как исправить этот код чтобы при вызове alert(test) или alert(test.toString()) выводилось окошко с надписью "test". Спасибо.
Проще всего делать test наследником обычного объекта, и в нём определить метод toString.
function Test(){}
Test.prototype.toString=function () {
  return "test";
};
var test = new Test();
console.log(test);
alert(test);
alert(test.toString());

Последний раз редактировалось oneguy, 31.07.2012 в 22:47.
Ответить с цитированием