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, время: 11:18. |