我编写了一个简单的Angular JS代码,它根据一天中的时间来迎接用户。它工作正常。代码如下:
var modSvc = angular.module("appName",[]);
modSvc.provider("date",function(){
var greeting;
return {
showGreeting:function(value){
greeting = value;
},
$get:function(){
//it has to return an object which can have variables and functions
return {
showDate:function(){
var date = new Date();
return date.getHours();
},
showGreetingMessage:function(){
//var date = new Date();
return greeting + ", It's "+ this.showDate();
}
}
}
};
});
modSvc.config(function(dateProvider){
var hours = dateProvider.$get().showDate();
if(hours<12)
dateProvider.showGreeting("Good morning!");
else if(hours<17)
dateProvider.showGreeting("Good afternoon!");
else if(hours<22)
dateProvider.showGreeting("Good evening!");
else
dateProvider.showGreeting("Good night!");
});
function serviceController($scope,date){
$scope.greetingMessage = date.showGreetingMessage();
}
modSvc.controller("svcController",serviceController);
如果你看到showGreetingMessage
函数,它只有一行代码:
return greeting + ", It's "+ this.showDate();
但showDate
函数与showGreetingMessage
函数的级别相同。这就是this.showDate
不应该起作用的原因,它应该给出错误。但它完美无缺。怎么回事?
答案 0 :(得分:1)
这取决于所使用的JavaScript
引擎,但根据Mozilla reference,您的“this”实际上引用了父对象,因为您要返回一个对象。
作为对象方法
当一个函数作为一个对象的方法被调用时,它被设置为调用该方法的对象。
在下面的例子中,当调用o.f()时,在函数内部将它绑定到o对象。
var o = {
prop: 37,
f: function() {
return this.prop;
}
};
console.log(o.f()); // logs 37