Arhn - архитектура программирования

Определение методов прототипа класса Javascript

Сначала я определил такой класс:

function mapTile(nx,ny)
{
    //members
    this.x = nx;
    this.y = ny;

    //methods
    this.prototype.visible = function(){return true;};
    this.prototype.getID = function(){return y*tiles_per_line+x;};
    this.prototype.getSrc = function(){return 'w-'+this.getID+'.png';}
};

Что вызывает исключение, когда я пытаюсь создать объект:

t=new mapTile(1,1)
TypeError: Cannot set property 'visible' of undefined

в Chromium и молча терпит неудачу в Firefox (с firebug)

Это работает нормально, хотя:

function mapTile(nx,ny)
{
    //members
    this.x = nx;
    this.y = ny;
};

//methods
//this.prototype.xx=1;
mapTile.prototype.visible = function(){return true;};

Как правильно реализовать методы-прототипы внутри тела?

03.01.2011

Ответы:


1

Как правильно реализовать методы-прототипы внутри тела?

Вам может не понравиться этот ответ: не определяйте их внутри тела, так как это будет переопределять их каждый раз, когда конструктор запускается для этого объекта. Определите их так же, как вы работали, с objectType.prototype... после его объявления.

Методы прототипа предназначены специально для совместного использования всеми экземплярами, то, что вы делаете, находится где-то посередине, вы либо хотите, чтобы они были объявлены внутри, специфичными для этого экземпляра, например:

function mapTile(nx,ny)
{
    //members
    this.x = nx;
    this.y = ny;

    //methods
    this.visible = function(){return true;};
    this.getID = function(){return y*tiles_per_line+x;};
    this.getSrc = function(){return 'w-'+this.getID+'.png';}
}

Или поделиться на прототипе снаружи, вот так:

function mapTile(nx,ny)
{
    //members
    this.x = nx;
    this.y = ny;
}
mapTile.prototype.visible = function(){return true;};
mapTile.prototype.getID = function(){return y*tiles_per_line+x;};
mapTile.prototype.getSrc = function(){return 'w-'+this.getID+'.png';}
03.01.2011
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..