2016-08-04 4 views
0

나는 하루 중 시간에 따라 사용자를 접하게하는 간단한 Angular JS 코드를 작성했습니다. 그것은 잘 작동합니다. 당신이 showGreetingMessage 기능을 볼 경우는 단 한 줄의 코드 만 가지고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); 

:

return greeting + ", It's "+ this.showDate(); 

그러나 showDate 기능은 showGreetingMessage 기능과 동일한 수준에서 상주를 코드는 아래와 같습니다. 그렇기 때문에 this.showDate은 작동하지 않아야하며 오류가 발생해야합니다. 하지만 완벽하게 잘 작동합니다. 그것은 어때?

답변

1

JavaScript 엔진에 따라 다르지만 Mozilla reference에 따르면 "this"는 실제로 개체를 반환하기 때문에 부모 개체를 참조합니다. 함수는 객체의 메소드 호출되는 객체 메소드

로서

은, 그이이 방법에 호출되는 오브젝트로 설정된다.

다음 예에서 o.f()가 호출 될 때 함수 내에서 this는 o 객체에 바인딩됩니다.

var o = { 
    prop: 37, 
    f: function() { 
    return this.prop; 
    } 
}; 

console.log(o.f()); // logs 37