Как я могу ссылаться на свойство объекта в анонимной функции в том же объекте? - PullRequest
3 голосов
/ 02 апреля 2012
var foo = {
  x: 1,
  y: (function () {
     return ++this.x;
  })()
};
console.log(foo.y); // undefined rather than 2

Допустим, Я хочу иметь возможность ссылаться на foo.y без использования foo.y () . Это возможно?

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

Ответы [ 5 ]

6 голосов
/ 02 апреля 2012

Если вы хотите получить доступ к y как к свойству, а не к функции, и хотите, чтобы он возвращал текущее значение foo.x, единственный способ, о котором я могу подумать, - это использовать getters / setters, который является частью спецификации ES5,и принят в большинстве современных браузеров (но не очень полезен, если вы поддерживаете старые браузеры).

var foo = {
    x: 1,
    get y() {
        return this.x;
    }
};
2 голосов
/ 02 апреля 2012

Вы объявляете y не как функцию, а как результат вызова функции. Должно быть:

var foo = {
  x: 1,
  y: function () {
     return this.x;
  }
};  

Или, если вы хотите просто присвоить y значение x:

 var foo = {
    x: 1,
    y: this.x
 };   

ОБНОВЛЕНИЕ: невозможно сделать y синонимом x. Когда вы объявляете y - это может быть значение или функция. Это не может быть ссылкой на другое значение.

1 голос
/ 02 апреля 2012

Почему бы просто не вернуть x напрямую, если вы не хотите использовать y () как функцию?Единственная причина, по которой вы должны вернуть функцию, заключается в том, что вам действительно нужно изменить результат x.

var foo = {
     x: 1,
     y: (function () {
          return this.x;
     })()}; 
console.log(foo.x); // 1
0 голосов
/ 02 апреля 2012
var foo = new Object();
foo.x = 1;
foo.y = function() { return this.x; };
console.log(foo.y());

или если вы пытаетесь вызвать y во время определения foo:

var foo = new Object();
foo.x = 1;
foo.y = x;
console.log(foo.y);
0 голосов
/ 02 апреля 2012

foo.y не является функцией. foo.y определяется как foo.x.

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