Передача Scope от одной функции к другой - PullRequest
0 голосов
/ 22 ноября 2011

У меня есть объект litrel, у которого есть две анонимные функции, определенные следующим образом:

obj = {
    funcA : function(){
        var a = 'a';
    },
    funcB : function(){
        // but how do you access the scope in 'funcA' to access variable 'a'?
        console.log(a)
    }
}

Я не хочу передавать какие-либо переменные, только область действия 'funcA' - мысли?

Ответы [ 3 ]

6 голосов
/ 22 ноября 2011

Область JavaScript не работает таким образом, поскольку имеет (только) область функций (кроме случаев использования ключевого слова let).

То, что вы могли бы do is ...

obj = {
    a: 0,
    funcA: function() {
        this.a = 'a';
    },
    funcB: function() {
        console.log(this.a);
    }
};

jsFiddle .

1 голос
/ 23 ноября 2011

Вы можете использовать замыкание с шаблоном модуля, чтобы получить доступ к переменным во внешней области видимости.Доступ к переменной может иметь несколько функций:

var obj = (function() {

  var a;

  return {

    setA: function(value) {
      a = value;
      return a;
    },

    getA: function(value) {
      return a;
    },

    multiplyA: function(value) {
      a = a * value;
      return a;
    }
  };
}());


alert(    obj.setA(5)      );  // 5
alert(    obj.multiplyA(2) );  // 10
alert(    obj.getA()       );  // 10

См. Статью Дугласа Крокфорда о Частные члены в JavaScript .Таким образом, функции могут совместно использовать объект общей переменной в своей цепочке областей действия.Вы по-прежнему не можете ссылаться на него или передавать его другой функции, но вы можете получить желаемую функциональность.

0 голосов
/ 26 ноября 2011

Этот код делает то, что вы хотите?Если нет, мне действительно любопытно, почему.

obj = {
    funcA : function(){
        this.a = 'a';
        alert(this.a);
    },
    funcB : function(){
        // but how do you access the scope in 'funcA' to access variable 'a'?
        alert(this.a);
    }
}

obj.funcA();
obj.funcB();

В чем разница между доступом к фактической области действия отдельной функции и настройкой элементов родительского объекта, как я это сделал?

Кроме того, поскольку нет способа передать область видимости, вы просто собираетесь использовать что-то похожее на этот код?

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