Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Какая разница в объектах? (https://javascript.ru/forum/misc/60635-kakaya-raznica-v-obektakh.html)

am_sasa 12.01.2016 14:02

Какая разница в объектах?
 
function F(id,a,b){
	this.getID=function(){return id}
	this.getSum=function(){return a+b}
}
или
function F(id,a,b){
	this.id=id;
	this.a =a;
	this.b = b;
	
	this.getID=function(){return this.id}
	this.getSum=function(){return this.a+this.b}
}

Объект упрощенный, и таких объектов много.
Меня терзают смутные сомнения, что надо использовать второй вариант.
Посоветуйте как правильней...

vasa_c 12.01.2016 14:43

Нужно использовать третий вариант:
сначала прочитать, как там всё устроено http://learn.javascript.ru/prototypes
а потом использовать babel или typescript с нормальными классами

ruslan_mart 12.01.2016 17:26

am_sasa, во втором варианте мы можем всегда перезаписать свойства из вне:

var f = new F(null, 1, 1);

f.a = 2;
f.b = 3;

alert( f.getSum() ); //5

am_sasa 12.01.2016 17:54

Спасибо, изучу. Правда там про ООП (прототип), которого у меня нет, но все равно спасибо.

am_sasa 12.01.2016 17:58

я имел ввиду, что при замыкании будут создаваться новые функции на каждый объект, а не использоваться существующие (имхо). Если не прав, то замыкания тоже хорошо.

ruslan_mart 12.01.2016 19:12

am_sasa, у вас в обеих вариантах каждый раз создаются новые функции.

Используйте прототипы:

function F(id, a, b) {
    this.id = id;
    this.a = a;
    this.b = b;
};
F.prototype = {
    getID: function() {
        return this.id;
    },
    getSum: function() {
        return this.a + this.b;
    }
};

am_sasa 13.01.2016 09:23

Ruslan_xDD, вот за это спасибо, теперь понял, так и сделаю.


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