Инкапсуляция JavaScript

388
03 февраля 2017, 06:37

Как достать инкапсулированное значение в прототип?

Как это выглядит:

function A(a,b){
    this.a = a;
    this.b = b;
    var arr = [a,b];
}
A.prototype.A1 = function(){
    console.log(this.a);
}
A.prototype.A2 = function(){
    console.log(this.arr);
}
var a1 = new A(1,2);
a1.A1();//1
a1.A2();//undefined

Как использовать arr в прототипе?

Answer 1

arr в данном коде является локальной переменной.

Доступ к локальной переменной может быть осуществлен только внутри функции, в которой объявлена переменная.

Либо во внутренних функциях.

function A(a,b){
    this.a = a;
    this.b = b;
    var arr = [a,b];
    function B(){
        console.log('B', arr); // доступно
    }
    console.log('A', arr); // доступно
}
A.prototype.C = function (){ /* arr недоступен */ }

Таким образом, использовать локальную переменную arr где-то еще кроме функции A - невозможно.

Answer 2

Рекомендую использовать Symbol для реализации более-менее приватных членов "класса".

var A = (function() { 
  var arrKey = Symbol(); 
 
  A.prototype.getArr = function() { 
    return this[arrKey]; 
  }; 
 
  return A; 
 
  function A(a, b) { 
    this.a = a; 
    this.b = b; 
    this[arrKey] = [a, b]; 
  }; 
})(); 
 
 
var a1 = new A(1, 2); 
console.log(a1.getArr()); // [1, 2]

READ ALSO
Мультистроковая регулярка

Мультистроковая регулярка

Пробую выделить текст двумя регуляркамиПервая не работает в js из-за метасимвола \b

299
Куда можно подключить карту Google JavaScript Maps

Куда можно подключить карту Google JavaScript Maps

Добрый день,таков вопросКуда можно подключить свою карту Google JavaScript Maps API 3,тем самым добавлять к ней скрипты,стили (CSS)

313
Как добавить меню на свою карту?

Как добавить меню на свою карту?

Добрый деньКак можно добавить меню на свою карту Google JavaScript Maps API 3 Что бы каждый пользователь мог рисовать линию фронта,или же какую нибудь...

308