我正在建立一个重新定义$scope
中属性的设置器和获取器的提供程序。提供程序将计算该属性被修改的次数。
我将尽可能简化代码,以便更轻松地解决问题。
控制器
[...]
export default function(myTracker) {
$scope.user = 'test';
mytracker.track($scope, 'user');
}
提供商
[...]
export default function myTrackerProvider() {
[...]
this.$get = function() {
var myTracker = {};
myTracker.track = function (scope, reference) {
Object.defineProperty (scope, reference, {
_ref: scope[reference],
get: function() {
return this._ref;
}
});
console.log(scope[reference]);
}
}
我确定必须使用另一个变量,例如_ref
来避免循环调用,但是我不明白为什么它不能以这种方式工作。
为什么在_ref: scope[reference]
之后,scope[ref]
未定义?
更新:如果我尝试运行此命令,则末尾的控制台将打印未定义的内容。
答案 0 :(得分:0)
我以这种方式解决了这个问题:
[...]
export default function myTrackerProvider() {
[...]
var counterGets = 0;
var counteerSets = 0;
this.$get = function() {
var myTracker = {};
myTracker.track = function (scope, reference) {
scope._ref = scope[reference];
Object.defineProperty (scope, reference, {
get: function() {
counterGets++:
console.log("get calls: ", counterGets);
return this._ref;
},
set: function(value) {
counterSets++;
console.log("get calls: ", counterSets);
this._ref = value;
}
});
}
}
我的问题是我坚持将临时变量放在Object.defineProperty
函数中,而不可能是可能的。唯一接受的参数是@Heretic Monkey提供的MDN链接中列出的参数。
另外,console.log
必须放在函数中(很明显)。