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
}
});