Как добавить методы объекту после конструирования.
Добрый день. Есть следующая логика: Функция конструктор 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); |
monolithed,
возможно и не понимаю, но в вашем примере это было лишнее. http://www.mail-archive.com/jsmentor.../msg00513.html это вы видимо пример как делать не надо? var object = {}; object.constructor.prototype.property = 1; alert([].property); |
Цитата:
function Rabbit (){} var rabbit = new Rabit; rabbi.run = function(){} // добавим только этому созданному кролику Rabbit.prototype.say = function(){} // добавим всем кроликам уже созданным и в будущем создаваемым |
Прочитал вопрос.
var arr = [1,2,3,4,5]; function MegaArray(){ this.ololo = function(){}; } MegaArray.call(arr); // примешаем свойства и методы MegaArray в массив arr теперь arr это смесь MegaArray и Array |
function Board() {} Board.method = function() { alert( 1 ); }; var arr = []; arr.method = Board.method; alert( arr.push ); alert( arr.method ); только это все извращения Цитата:
прям ниндзя :) Цитата:
var set = function (x) { alert( x ); }.call(set); |
Цитата:
|
Цитата:
Цитата:
|
Да, применяешь функции для смешивания последовательно в порядке наследования от родительского класса к дочернему, дочерние методы и свойства оверфловят родительские если имена совпадают; Тут даже статья должна быть в учебнике; Поищу ссылку дам;
нашел http://habrahabr.ru/post/147901/ |
Дзен-трансгуманист, вот поэтому мой мозг взрывает фраза
Цитата:
megaupload, за ссылку спасибо. Я ее уже видел. |
Дзен-трансгуманист,
Это потому что вы путаете наследование на прототипах и наследование на примесях; Почитайте про наследование на прототипах; nerv_, Почитайте про наследование; |
megaupload,
Вы бы хоть ссылку разместили, какую-нить про "наследование на примесях", а то это звучит как некая неведомая ... в вакууме, а мы то люди мало грамотные (вспоминаем отзыв ваш нелестный), сами поисковками ни разу не пользовавшиеся, вряд ли справимся |
megaupload,
Ну и да, хотелось бы подчеркнуть, что в бурно разивающемся интернете, первую попавшуюся статью не стоит оценивать как догму... |
Дзен-трансгуманист,
То есть все что я говорю автоматически становится неправдой? даже если я говорю правду? |
Дзен-трансгуманист,
Я прям как телевизор. |
Дзен-трансгуманист,
Вот вот. Луркай поменьше и мне верь побольше. А лучше не верь, а проверяй. |
Часовой пояс GMT +3, время: 14:22. |