2013-09-10 5 views
3

Возможно ли иметь несколько параметров для функции Set.defineProperty setter?Несколько параметров для функции Set.defineProperty Setter?

E.G.

var Obj = function() { 
    var obj = {}; 
    var _joe = 17; 

    Object.defineProperty(obj, "joe", { 
    get: function() { return _joe; }, 
    set: function(newJoe, y) { 
     if (y) _joe = newJoe; 
    } 
    }); 

    return obj; 
} 

Я не получаю никаких ошибок от синтаксиса, но я не могу понять, как вызвать функцию сеттера и передать ему два аргумента.

+1

Почему бы вам хочу это? – Bergi

ответ

6

Возможно ли иметь множество параметров для функции Set.defineProperty setter?

Да, но их невозможно вызвать (кроме Object.getOwnPropertyDescriptor(obj, "joe").set(null, false)). Установщик вызывается с значением, которое присваивается свойству (obj.joe = "doe";) - вы не можете присвоить сразу несколько значений.

Если вам действительно нужны (по каким-либо причинам), лучше используйте базовый метод настройки (obj.setJoe(null, false)).

0

Просто интересная мысль.

var Joe = (function() { 

    // constructor 
    var JoeCtor = function() { 

     if (!(this instanceof Joe)){ 
      throw new Error('Error: Use the `new` keyword when implementing a constructor function'); 
     } 

     var _age = 17; 

     // getter/setter for age 
     Object.defineProperty(this, "age", { 
      get: function() { return _age; }, 
      set: function(joeObj) { 
       if (joeObj.assert) { 
        _age = joeObj.value; 
       } 
      } 
     }); 

    }; 

    // static 
    JoeCtor.ageUpdateRequest = function(canSet, newAge){ 
     return { assert: canSet, value: newAge } 
    }; 

    return JoeCtor; 

})(); 

myJoe = new Joe(); 

myJoe.age = Joe.ageUpdateRequest(true, 18); 
0

У меня была аналогичная дилемма с присваивателя, поэтому я закончил с объектом PARAM (ES6 синтаксиса):

set size(param) { 
    this.width = param.width; 
    this.height = param.height; 
    } 

И я использую это нравится:

this.size = {width: 800, height: 600}; 

 Смежные вопросы

  • Нет связанных вопросов^_^