Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не прототипирование (https://javascript.ru/forum/misc/16026-ne-prototipirovanie.html)

goldserg 23.03.2011 13:13

Не прототипирование
 
Есть у меня функция
Array.prototype.copy = function() {...}

была давно сделана через прототип, чисто для краткости кода и не замусоривания пространства имен.
Но таким образов пухнет объем оперативки как я понимаю.

Можно ли использовать такой способ.
Array.copy = function() {...}

Gvozd 23.03.2011 13:23

Цитата:

Сообщение от goldserg
Но таким образов пухнет объем оперативки как я понимаю.

это ваши домыслы, или есть какие-то доказательства?

Цитата:

Сообщение от goldserg
Можно ли использовать такой способ.
Array.copy = function() {...}

можно.
а еще можно использовать, к примеру:
copy = function() {...}

но это все три разных кода, которые выполняют разыне задачи, и по-разному же должны использоваться.
кстати, ваш второй код гораздо ближе к моему примеру, нежели к вашему первому коду.

goldserg 23.03.2011 13:37

Цитата:

Сообщение от Gvozd (Сообщение 97692)
это ваши домыслы, или есть какие-то доказательства?

Домыслы, лично не проверял, но по логике скорее всего, т.к. появляется экземпляр класса Array, и на него вешаются функции.

copy = function
Повторюсь не хочу мусорить в пространстве имен.

Gvozd 23.03.2011 14:21

Цитата:

Сообщение от goldserg
но по логике скорее всего, т.к. появляется экземпляр класса Array, и на него вешаются функции.

что-то я не вижу тут ни капли логики.
в вашем коде, вы добавляете метод в уже существующий объект Array.prototype.
память выделяется только под функцию, и выделяется один раз

Kolyaj 23.03.2011 14:22

Цитата:

Сообщение от goldserg
т.к. появляется экземпляр класса Array, и на него вешаются функции.

Не вешаются. Функция одна на все экземпляры. Но даже если бы вешались, то они бы не копировались, функция всё равно была бы одна, но много ссылок на неё.

Sweet 23.03.2011 14:26

Объем оперативки не "пухнет" ни в том, ни в другом случае. Разница в том, что если использовать prototype, что метод copy будет у всех массивов, а если copy будет методом объекта Array, то и использовать его можно только как Array.copy. Т.е.
Array.copy1 = function(){};
Array.prototype.copy2 = function(){};

var array = [];
alert(array.copy1); // undefined
alert(Array.copy1); // copy1
alert(array.copy2); // copy2

goldserg 23.03.2011 14:39

Спасибо за разъяснения.
Вопрос закрыт.


Часовой пояс GMT +3, время: 06:39.