Решение уродливого синтаксиса для геттера в JS - PullRequest
0 голосов
/ 20 марта 2012

Давайте возьмем этот объект:

var person = {
    _name: "John",
    name: function() {return _name}
}

В графическом интерфейсе

myTextBox.value = person.name()

вернется

"John"

Но

myTextBox.value = person.name

вернет

function() {return _name}

Как заставить оба синтаксиса вернуть "John"? Могу ли я использовать закрытие ( вопрос, который я задавал ранее ) как-то здесь?

Ответы [ 3 ]

2 голосов
/ 20 марта 2012

Если вы поддерживаете только современные браузеры, вы можете использовать ES5 Getters , но в целом это JavaScript, почему вы пытаетесь сделать его сложным?

Ваши альтернативы:

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

Я бы пошелдля # 2.

Я думаю, что вы здесь путаетесь с этим синтаксисом, но на самом деле он имеет ту же проблему, что и вы сейчас:

function Person(name) {
 this._name = name;   
}
Person.prototype.name = function(name) {
  if (name) this._name = name;
  return this._name;
}
var j = new Person("Jay");
j.name() // "Jay"
j.name("Thomas"); // I can set the value as well
j.name() // "Thomas"

Кажется, вы пытаетесьсоздать настоящие приватные переменные, которые возможны, но, вероятно, не очень полезны.

function Person(name) {
  var myName = name; // private
  this.name = function() {
    return myName;
  }
}
var j = new Person("Jay");
j.name(); // still had to use perens

Наконец, поскольку у вас простой объект, мы можем это сделать.Не уверен, почему вы хотите, хотя:

var person = {};
(function(name) {
  var myName = name; // myName and name, both private, but not helpful
  person = {
    name = myName
  }
}("Jay"))
person.name // "Jay"
1 голос
/ 20 марта 2012

Хорошо, была игра, и похоже, что это «возможно» (по крайней мере, в Chrome), но это немного грязный хак.person.name () возвращает "Джон".

1 голос
/ 20 марта 2012

Вы не можете!

  • Вы не можете переопределить операторы JavaScript или ключевые слова.
  • вы действительно не можете иметь один оператор \ ключевое слово, которое делает две разные вещи в одном контексте!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...