Страницы

Поиск по вопросам

четверг, 14 февраля 2019 г.

Добавление метода к объекту через прототип

Приведённый ниже код должен назначить объекту типа Image с помощью прототипа три новых метода: protocol(), host() и pathname() В браузере FireFox всё проходит нормально. Chrome выдаёт следующую ошибку:
Uncaught TypeError: document.i1.protocol is not a function
Соответственно, и остальные функции document.i1.host и document.i1.path не выполняются.
В чём заключается проблема, и как её решить?
function pr() { a = this.src.split(':'); return a[0] + ':'; }
function ho() { a = this.src.split(':'); path = a[1].split('/'); return path[2]; }
function pa() { path = this.src.split('/'); path[0] = ''; path[2] = ''; return path.join('/').split('///').join('/'); }
Image.prototype.protocol = pr; Image.prototype.host = ho; Image.prototype.pathname = pa;
document.write("
"); document.write(document.i1.src + "
"); document.write(document.i1.protocol() + "
"); document.write(document.i1.host() + "
"); document.write(document.i1.pathname() + "
");


Ответ

Полученный (например, с помощью document.getElementById('img') или new Image()) имеет тип HTMLImageElement. Соответственно, добавлять новые методы нужно именно в его прототип.
Пример:
function log(info) { document.body.innerHTML += info + "
"; } HTMLImageElement.prototype.protocol = function() { log("Protocol is called"); }; var img = document.getElementById('img'); log("Got image: " + img.constructor.name); img.protocol(); var newImage = new Image(); log("New image: " + newImage.constructor.name); newImage.protocol();

Комментариев нет:

Отправить комментарий