Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 工厂中具有重叠名称的私有变量_Javascript_Angularjs - Fatal编程技术网

Javascript 工厂中具有重叠名称的私有变量

Javascript 工厂中具有重叠名称的私有变量,javascript,angularjs,Javascript,Angularjs,我在MyData工厂中有someVar是私有的。只有get()函数才能返回该变量。我还有一个回调(使用$timeout)在1秒后更改该变量 诀窍是在这段代码中,回调变量与私有变量someVar的命名相同 myTask(function(someVar) { this.someVar = someVar; }); 如果我把他们的名字改成不同的名字,那就行了。但是如果我使用this.someVar引用工厂的私有变量,它就不起作用了如果名称可能与回调重叠,那么如何在工厂中引用私有变量

我在
MyData
工厂中有
someVar
是私有的。只有
get()
函数才能返回该变量。我还有一个回调(使用
$timeout
)在1秒后更改该变量

诀窍是在这段代码中,回调变量与私有变量
someVar
的命名相同

  myTask(function(someVar) {
    this.someVar = someVar;
  });
如果我把他们的名字改成不同的名字,那就行了。但是如果我使用
this.someVar
引用工厂的私有变量,它就不起作用了如果名称可能与回调重叠,那么如何在工厂中引用私有变量?

这是我的密码

HTML

<!DOCTYPE html>
<html ng-app="plunker">

  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link rel="stylesheet" href="style.css" />
    <script data-require="angular.js@1.2.x" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.17/angular.min.js" data-semver="1.2.17"></script>
    <script src="app.js"></script>
  </head>

  <body ng-controller="MainCtrl">
    <p>Hello {{someVar}}!</p>
    <button ng-click="get()">Get MyData.someVar</button>
  </body>

</html>

函数参数始终从外部作用域中隐藏
var someVar
。您唯一能做的就是省略/重命名其中一个。属性的名称(
.someVar
)完全不相关。是否有方法以某种方式引用工厂的上下文
this
,除非引入一个包含它的变量。但我不认为这就是你想要的,它与保存局部变量的作用域不同。嗯,我希望有一个解决方法或某种技巧。。那么我应该删除这个问题吗?
var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope, MyData) {
  $scope.someVar = 0;

  MyData.runTask();

  $scope.get = function() {
    alert(MyData.get);
  }
});

app.factory('MyData', function($timeout) {
  var someVar = 1;

  return {
    runTask: function() {
      function myTask(callback) {
        $timeout(function() {
          callback(2);
        }, 1000);        
      }

      myTask(function(someVar) {
        this.someVar = someVar;
        alert('After 1 sec. someVar = ' + someVar + ' and this.someVar = ' + this.someVar);
      });
    },
    get: someVar
  }
});