Клуб API Карт

Создание объекта YMaps.ITile

Пост в архиве.

хочу переопределить getTile() у YMaps.TileDataSource

var myData = new YMaps.TileDataSource("http://mt.gmapuploader.com/tiles/FVSH1JsvdT/", false, true); //это из примера "Создание своего типа карты."
//далее
my_tile_iface = function(tile_data_source){}
my_tile_iface.prototype = YMaps.ITile
myData.getTile = function(){new my_tile_iface(this)}

Получаю

Error: s is undefined Source File: http://api-maps.yandex.ru/1.1.7/_YMaps.js Line: 11

если вместо последний строки написать

myData.getTile = function(){new YMaps.ITile(this)}

Получаю

Error: YMaps.ITile is not a constructor Source File: file:///X:/web/mapcutter/index.html Line: 167

хотя здесь написано, что конструктор..

непонятно.. (с)

что я делаю не так.. (c)

9 комментариев
1. хотя здесь написано, что конструктор..
нет, там написано что это интерфейс, и вы должны его повторить, а не наследоваться
2.my_tile_iface.prototype = YMaps.ITile
вообщето my_tile_iface.prototype = new YMaps.ITile, либо вообще сделать через функцию шаманизма 
Кирилл Яковлев
28 января 2016, 07:48
вообщето my_tile_iface.prototype = new YMaps.ITile

нет, именно как я написал (посмотрите в той же статье откуда взята "функция шаманизма")

Написано

Конструктор

Имя Описание
YMaps.ITile(tileDataSource) Интерфейс тайла.

Я же вижу, что невозможно создать объект с помощью оператора new.

Правда, я забыл return в предыдущих примерах, и прототипом (т.е. без вызова конструктора) мне (вроде как) удалось копировать объект. Но появилась другая ошибка:

Error: s.onAddToMap is not a function Source File: http://api-maps.yandex.ru/1.1.7/_YMaps.js Line: 11
 YMaps.ITile - это интерфейс тайла (определение тайла см. в Глоссарии).  Если Вы хотите использовать интерфейс, то необходимо реализовать ВСЕ методы, описанные в интерфейсе.
http://clubs.ya.ru/mapsapi/replies.xml?item_no=1698


Кирилл Яковлев
28 января 2016, 07:48

Теперь понял. Но все равно имеет место быть ряд противоречий (как "конструктор у интерфейса"). Или еще:


API:


Наследуемые методы


Из YMaps.ITile: abort,
error,
getPosition,
load,
onAddToMap,
onRemoveFromMap,
scale,
setPosition
Саша:
Интерфейсы не нужно путать с классами (например, YMaps.Zoom,
YMaps.Balloon и т.д.). От них нельзя наследоваться.

Суть не в том, что от интерфейсов нельзя наследоваться, а в том, что это просто перечень методов в документации, и таких объектов вообще не существует.


Я хотел наследоваться от используемого поумолчанию объекта ("класса") тайлов и этим объектом оказался YMaps.ImageTile. Просто в описании TileDataSource ссылка была именно на интерфейс, поэтому я начал о нем говорить.
Все тама нормально, у любого обьекта должен быть конструктор, явный или не явный
И если вы повторите интерфейс - он у него будет :)
Кирилл Яковлев
28 января 2016, 07:48
у любого обьекта должен быть конструктор

верно.


alert(YMaps.ITile) //undefined
- нет объекта. Должно быть написано, что это интерфейс конструктора.
Кирилл Яковлев
28 января 2016, 07:48
это хорошо, обычно после такого открывается карма :)
Кирилл Яковлев
28 января 2016, 07:48
Да.. и наследоваться-таки удалось:
my_tile_iface = function(tile_data_source){
    me = new YMaps.ImageTile(tile_data_source)
    return me
}