Рубрики
Без рубрики

Геттерс и поселенцы в JavaScript

Геттерс и загадки очень важны на задневших языках, но они никогда не могли набрать много популярности в JavaScript. Прочитайте, чтобы узнать больше о том, как вы можете использовать их в JS.

Автор оригинала: Maximiliano Benedetto.

Геттерс и поселенцы в JavaScript

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

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

Для этого у нас есть GetValue / SetValue узор, который работает так же, как разработчик Java, ожидает:

 function Field(val){      
   var value = val;      
   this.getValue = function(){         
     return value;     
   };   
   this.setValue = function(val){        
     value = val;    
   }; 
 }

Но это довольно многословный и уродливый. Это где ecmascript 5 приходит в:

var person = {     
    get fullName() {        
       return this.firstName + ' ' + this.lastName;    
    },    
    set fullName (name) {        
        var words = name.toString().split(' ');        
        this.firstName = words[0] || '';        
        this.lastName = words[1] || '';    
     } 
 } 
 person.fullName = 'Bryan Singer'; 
 alert(person.firstName); // alerts Bryan 
 alert(person.lastName) // alerts Singer

Используя этот синтаксис, вы можете позже назначить или получить значение, как и любое другое свойство, используя разные функции для каждой операции.

Если вам нужно, вы также можете определить своих посетителей и Getter после Определение объекта с использованием Объект.defineproperty Отказ

var Child = {}; 
Object.defineProperty(Child, 'old', {     
     get: function() { return this.age },     
     set: function(value) { this.age = value - 2 } 
}) 
Child.old = 7; 
console.log(Child.old); // 5

Просто убедитесь, что никогда не смешивайте Get/Set с любым другим именем свойства. Что я имею в виду под этим, в последнем примере у вас не может быть другого Это .old имущество. Например, если наш сеттер выглядит так:

set: function(value) { this.old = value }

Мы бы в конечном итоге имеем максимальную ошибку стека вызовов, потому что сеттер будет бесконечно призывать себя …

Соседниты и получатели могут быть использованы для расширения прототипов, а также для проверки некоторых данных. Имейте в виду, что Object.DefineProperties Позволяет установить более одного свойства за раз:

var Person = function() {}; 
Object.defineProperties(Person.prototype, {     
    'fullName': {             
        get: function() {                 
            return this.firstname + ' ' + this.lastName              
        },              
        set: function(value) {                  
            var parts = value.split(' ');                  
            if (parts.length == 2) {                    
                this.firstName = parts[0];                    
                this.lastName = parts[1];                 
            }             
         }       
      } 
  }); 
  var p = new Person(); 
  p.fullName = "Maxi Benedetto"; 
  alert(p.firstName); // Maxi 
  alert(p.lastName); // Benedetto

Этот синтаксис GET/SET поддерживается во всех основных браузерах, кроме IE <9, а также в Node.js.

Есть старый синтаксис, __definegetter__ и __definesetter__ , но он устарел, поэтому вы больше не должны обращать на него внимания.

Дайте мне знать, что вы думаете, оставив комментарий ниже!

Ваше здоровье!