Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.01.2013, 10:59
Интересующийся
Отправить личное сообщение для DragorWW Посмотреть профиль Найти все сообщения от DragorWW
 
Регистрация: 27.06.2011
Сообщений: 15

Как добавить методы объекту после конструирования.
Добрый день. Есть следующая логика: Функция конструктор Board создаёт объект board;

random = function () {
	var min = 1;
	var max = 20;
	return Math.floor(Math.random() * (max - min) + min);
}
Board = function() {
	var _board = [];
	_board.width = 15;
	_board.height = 40;
	var set = function () {
		for (var i = 0; i < _board.width; i++) {
			_board.push([])
			for (var ii = 0; ii < _board.height; ii++) {
				_board[i].push(random());
			}
		}
	}.call(set)
	return _board;
}
board = Board();

board будет типа Array. нужно добавить всем объектам созданным через Board ещё один метод. Как бы это сделать получше.
Так как в моём варианте Board.prototype.someMethod не прокатет так как board не связан с ним.
Ну или как можно конструировать массивы с определёнными методами иначе.
Ответить с цитированием
  #2 (permalink)  
Старый 16.01.2013, 12:13
Интересующийся
Отправить личное сообщение для DragorWW Посмотреть профиль Найти все сообщения от DragorWW
 
Регистрация: 27.06.2011
Сообщений: 15

Сообщение от рони Посмотреть сообщение
DragorWW,
Понятно что пример, но зачем строки 12,13 и 15 ???
может не правельно понял вопрос, но мм... делают матрицу X на Y
Ответить с цитированием
  #3 (permalink)  
Старый 16.01.2013, 12:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 31,029

DragorWW,
ок я неудачно скопировал код
Ответить с цитированием
  #4 (permalink)  
Старый 16.01.2013, 15:52
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от DragorWW
var _board = [];
_board.width = 15;
_board.height = 40;
считаете нормальным так делать?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #5 (permalink)  
Старый 16.01.2013, 22:40
Интересующийся
Отправить личное сообщение для DragorWW Посмотреть профиль Найти все сообщения от DragorWW
 
Регистрация: 27.06.2011
Сообщений: 15

Сообщение от nerv_ Посмотреть сообщение
считаете нормальным так делать?
считаю удобным так делать. так как переменная при обращение ведёт себя как мастив но при этом содержит так же дополнительную информацию и функции.

Но если скажите почему так делать нельзя/не желательно я буду очень признателен.

Последний раз редактировалось DragorWW, 16.01.2013 в 23:03.
Ответить с цитированием
  #6 (permalink)  
Старый 17.01.2013, 05:15
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

var foo = function (param) {
      this.property = param;

};

foo.prototype = {
      constructor: foo,
      method: function () {
             return this.property;
      }
}; 

var object = new foo (2);
alert(object.method()); // 2

object.constructor.prototype.method_2 = function() {
       return this.property * 2;
};

var object_2 = new foo(3);
alert([
   object.method_2(),    // 4
   object_2.method_2(),  // 6
   new foo(3).method_2() // 6
]);

Последний раз редактировалось monolithed, 17.01.2013 в 11:51.
Ответить с цитированием
  #7 (permalink)  
Старый 17.01.2013, 11:16
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 13,339

Если я правильно понимаю....
Сообщение от DragorWW
добавить всем объектам созданным через Board ещё один метод
Не получится.
В примере monolithed просто делается еще один объект object_2, но у object ничего не добавилось...
Ответить с цитированием
  #8 (permalink)  
Старый 17.01.2013, 17:37
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от DragorWW
Но если скажите почему так делать нельзя/не желательно я буду очень признателен.
потому, что это массив. А вы подмешиваете ему логику объекта (что не очевидно)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #9 (permalink)  
Старый 18.01.2013, 10:05
Профессор
Отправить личное сообщение для Dmitriyff Посмотреть профиль Найти все сообщения от Dmitriyff
 
Регистрация: 22.07.2012
Сообщений: 164

Сообщение от nerv_
потому, что это массив. А вы подмешиваете ему логику объекта (что не очевидно)
поэтому поводу можно много холиварить, js достаточно гибок, если это не мешает другим, а свою работу облегчает, это будет только к лучшему.

monolithed,
foo.prototype = {
      constructor: foo, // это лишнее, и без него будет работать
      method: function () {
             return this.property;
      }
};


DragorWW,
если вам нужен массив, то вариант только один, в функции Broad добавить _broad.someMethod = ...

ибо если вы это сделаете так Array.prototype.someMethod = ...
то конечно все объекты _broad будут иметь этот метод, но это плохой тон, хотя вам решать

Сделать наследование от массива и не утратить саму его суть
a[0] = 1;
a.length = 1;
a[1] = 2;
a.length = 2;

у меня не вышло, но я и не считаю себя гуру =-), возможно есть решения
Ответить с цитированием
  #10 (permalink)  
Старый 18.01.2013, 13:50
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от Dmitriyff
constructor: foo, // это лишнее, и без него будет работать
Не нужно писать чушь если вы что-то не понимаете!

var object = {};
object.constructor.prototype.property = 1;

alert([].property);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отобразить img только после загрузки всего изображения overdrive Общие вопросы Javascript 6 06.11.2012 18:02
Как вызвать событие после события определенного в onchange Наталья Events/DOM/Window 2 12.09.2009 12:51
Как добавить метод ко всем элементам? zubr80 Events/DOM/Window 3 06.04.2009 04:46
Как добавить свой блог в раздел feeds этого сайта IzumeRoot Ваши сайты и скрипты 13 30.10.2008 20:11
Как передать элемент в функцию после createElement Oleg NT Общие вопросы Javascript 3 23.06.2008 01:11