Сообщение от 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());