Как добавить методы объекту после конструирования.
Добрый день. Есть следующая логика: Функция конструктор 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, время: 06:47. |