Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   var или function при ООП? (https://javascript.ru/forum/misc/26600-var-ili-function-pri-oop.html)

artnik 14.03.2012 15:42

var или function при ООП?
 
Подскажите, есть ли разница в использовании var и function при ООП.
К примеру мой js файл подключается в head-е документа.
Сейчас я начал писать код типо "var a = {b:function(){...}}". Но, возможно, правильнее писать так "function a() {this.b = function(){...}}"?

vasa_c 14.03.2012 16:30

у каждого из бесчисленного количества вариантов будет своё "правильнее".

tadjik1 14.03.2012 16:42

ну так это же разные вещи, в первом случае объект, во второй случае конструктор =)
ну т.е. в первом случае у вас есть только один объект со своими методами
a.b();

а во втором случае вы можете много таких объектов создать
var c = new a();
var d = new a();


очень рекомендую вам learn.javascript.ru, а потом статьи http://javascript.ru/doctree вот тут.

artnik 14.03.2012 16:48

Спасибо, почитаю

alexmix 19.12.2019 14:48

В разных исходниках видел, что можно писать вот так:

var obj = {
	init: function() {
	...
	foobar: function() {
	...
};

obj.init();


А можно так:

function func() {
	...
	...init...
	...
	this.foobar = function() {
	...
}

var obj = new func();


Вопросы:
1. В каких ситуациях что лучше / правильнее использовать (если можно, то какие-то простейшие примеры, но не абстрактные, а из реальной практики)?
2. Если вариант 2 можно использовать много раз, то не лучше ли (универсальнее) его использовать всегда?

Nexus 19.12.2019 15:00

Лучше, имхо, так:
class SomeClass {
    constructor() {}

    foobar() {}
}

var baz = new SomeClass();
baz.foobar();

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

alexmix 19.12.2019 15:40

Правильно ли я вас понял - с точки зрения расхода памяти, если мы реализуем только одну какую-то сущность, то не имеет значения, какой вариант выбрать. Если сущностей будет несколько, то лучше делать ваш вариант? Так?

Alexandroppolus 20.12.2019 14:09

Цитата:

Сообщение от alexmix
Правильно ли я вас понял - с точки зрения расхода памяти, если мы реализуем только одну какую-то сущность, то не имеет значения, какой вариант выбрать. Если сущностей будет несколько, то лучше делать ваш вариант? Так?

да.

если хочешь "по старинке" сделать, то функции можно в прототип запихнуть, будет практически копия варианта с классом

function func() {
	...
	...init...
	...
}

func.prototype.foobar = function() {...}

var obj = new func();


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