В настоящее время я пишу объекты на javascript, и я хотел бы сделать это ясным, приятным способом, используя лучшие практики и т. д. Но меня беспокоит, что я всегда должен писать это.
для адресации атрибутов, в отличие от других языков объектно-ориентированного программирования.
Так что у меня возникла идея - почему бы просто не использовать замыкания для атрибутов объекта? Посмотрите на мой пример объекта. Итак, вместо этого, классический способ:
var MyObjConstructor = function (a, b) {
// constructor - initialization of object attributes
this.a = a;
this.b = b;
this.var1 = 0;
this.var2 = "hello";
this.var3 = [1, 2, 3];
// methods
this.method1 = function () {
return this.var3[this.var1] + this.var2;
// terrible - I must always write "this." ...
};
}
... Я бы сделал это , используя закрытие , и тогда мне не нужно было бы писать это.
каждый раз для доступа к атрибутам!
var MyObjConstructor = function (a, b) {
// constructor - initialization of object attributes
// the attributes are in the closure!!!
var a = a;
var b = b;
var var1 = 0;
var var2 = "hello";
var var3 = [1, 2, 3];
// methods
this.method1 = function () {
return var3[var1] + var2;
// nice and short
};
// I can also have "get" and "set" methods:
this.getVar1 = function () { return var1; }
this.setVar1 = function (value) { var1 = value; }
}
Кроме того, у него есть скрытое преимущество, заключающееся в том, что к атрибутам действительно нельзя получить доступ иначе, как с помощью методов get / set !!