Как добавить методы объекту после конструирования.
Добрый день. Есть следующая логика: Функция конструктор 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 не связан с ним. Ну или как можно конструировать массивы с определёнными методами иначе. |
Цитата:
|
DragorWW,
ок я неудачно скопировал код |
Цитата:
|
Цитата:
Но если скажите почему так делать нельзя/не желательно я буду очень признателен. |
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 просто делается еще один объект object_2, но у object ничего не добавилось... |
Цитата:
|
Цитата:
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; у меня не вышло, но я и не считаю себя гуру =-), возможно есть решения |
Цитата:
var object = {}; object.constructor.prototype.property = 1; alert([].property); |
Часовой пояс GMT +3, время: 10:49. |