var или function при ООП?
Подскажите, есть ли разница в использовании var и function при ООП.
К примеру мой js файл подключается в head-е документа. Сейчас я начал писать код типо "var a = {b:function(){...}}". Но, возможно, правильнее писать так "function a() {this.b = function(){...}}"? |
у каждого из бесчисленного количества вариантов будет своё "правильнее".
|
ну так это же разные вещи, в первом случае объект, во второй случае конструктор =)
ну т.е. в первом случае у вас есть только один объект со своими методами a.b(); а во втором случае вы можете много таких объектов создать var c = new a(); var d = new a(); очень рекомендую вам learn.javascript.ru, а потом статьи http://javascript.ru/doctree вот тут. |
Спасибо, почитаю
|
В разных исходниках видел, что можно писать вот так:
var obj = { init: function() { ... foobar: function() { ... }; obj.init(); А можно так: function func() { ... ...init... ... this.foobar = function() { ... } var obj = new func(); Вопросы: 1. В каких ситуациях что лучше / правильнее использовать (если можно, то какие-то простейшие примеры, но не абстрактные, а из реальной практики)? 2. Если вариант 2 можно использовать много раз, то не лучше ли (универсальнее) его использовать всегда? |
Лучше, имхо, так:
class SomeClass { constructor() {} foobar() {} } var baz = new SomeClass(); baz.foobar(); В вашем случае в памяти будет храниться реализация методов для каждого экземпляра класса. В моем в памяти будет храниться только реализация прототипа класса, экземпляры будут ссылаться на прототип. |
Правильно ли я вас понял - с точки зрения расхода памяти, если мы реализуем только одну какую-то сущность, то не имеет значения, какой вариант выбрать. Если сущностей будет несколько, то лучше делать ваш вариант? Так?
|
Цитата:
если хочешь "по старинке" сделать, то функции можно в прототип запихнуть, будет практически копия варианта с классом function func() { ... ...init... ... } func.prototype.foobar = function() {...} var obj = new func(); |
Часовой пояс GMT +3, время: 21:34. |