Mimi c закрытая переменная в Javascript - PullRequest
1 голос
/ 09 апреля 2020

Я просматриваю книгу "JavaScript для ниндзя" и нашел следующий текст в контексте "Как имитировать c закрытую переменную в JavaScript через литерал объекта и классы"

Автор показывает пример реализации закрытой переменной через литерал объекта:

enter image description here

А затем упомянул следующее:

JavaScript не имеет свойств закрытого объекта. Вместо этого мы можем имитировать c их через замыкания, определяя переменные и определяя методы объекта, которые будут закрывать эти переменные. Поскольку с помощью литералов и классов объектов наши методы получения и установки не создаются в той же области действия функции, что и переменные, которые мы могли бы использовать для свойств частного объекта, мы не можем этого сделать

Может ли кто-нибудь помочь мне понять выделенный текст.

1 Ответ

3 голосов
/ 09 апреля 2020

Несмотря на то, что они технически не являются частными свойствами Объекта, они также могут рассматриваться как те, что у вас на уме, так как они ограничены в конструкторе или классе:

function Tester(initVal){
  let privateProp = initVal;
  this.publicProp = 'testing';
  this.setPrivate = val=>{
    privateProp = val;
    return this;
  }
  this.getPrivate = ()=>{
    return privateProp;
  }
  this.setStatic = (prop, val)=>{
    if(typeof val === 'function')val.bind(this);
    this.constructor.prototype[prop] = val;
    return this;
  }
}
const test = new Tester('Initial Value');
console.log(test.publicProp); console.log(test.privateProp);
console.log(test.getPrivate());
console.log(test.setPrivate('See how it works?').getPrivate());
test.setStatic('cool', 'neat');
const test2 = new Tester;
console.log(test2.cool);
test.setStatic('fun', function(){
  return this.setStatic('staticProp', "Really, that's fantastic!");
});
test.fun(); console.log(test2.staticProp);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...