&引用;这";函数上下文中的javascript关键字

&引用;这";函数上下文中的javascript关键字,javascript,function,angularjs,this,Javascript,Function,Angularjs,This,我只是想知道在下面函数的上下文中“this”关键字指的是什么: function EditCtrl($scope, $location, $routeParams, Project) { var self = this; Project.get({id: $routeParams.projectId}, function(project) { self.original = project; $scope.project = new Project(self.origi

我只是想知道在下面函数的上下文中“
this
”关键字指的是什么:

function EditCtrl($scope, $location, $routeParams, Project) {
  var self = this;

  Project.get({id: $routeParams.projectId}, function(project) {
    self.original = project;
    $scope.project = new Project(self.original);
  });

  $scope.isClean = function() {
    return angular.equals(self.original, $scope.project);
  }

  $scope.destroy = function() {
    self.original.destroy(function() {
      $location.path('/list');
    });
  };

  $scope.save = function() {
    $scope.project.update(function() {
      $location.path('/');
    });
  };
}
特别是,我认为“
this
”指的是
EditCtrl
函数,而不是
console.log(this的类型)打印
对象

上面的片段取自

编辑:这是完整的代码。我很抱歉:我应该把它放在第一位

angular.module('project', ['mongolab']).
  config(function($routeProvider) {
    $routeProvider.
      when('/', {controller:ListCtrl, templateUrl:'list.html'}).
      when('/edit/:projectId', {controller:EditCtrl, templateUrl:'detail.html'}).
      when('/new', {controller:CreateCtrl, templateUrl:'detail.html'}).
      otherwise({redirectTo:'/'});
  });


function ListCtrl($scope, Project) {
  $scope.projects = Project.query();
}


function CreateCtrl($scope, $location, Project) {
  $scope.save = function() {
    Project.save($scope.project, function(project) {
      $location.path('/edit/' + project._id.$oid);
    });
  }
}


function EditCtrl($scope, $location, $routeParams, Project) {
  var self = this;

  Project.get({id: $routeParams.projectId}, function(project) {
    self.original = project;
    $scope.project = new Project(self.original);
  });

  $scope.isClean = function() {
    return angular.equals(self.original, $scope.project);
  }

  $scope.destroy = function() {
    self.original.destroy(function() {
      $location.path('/list');
    });
  };

  $scope.save = function() {
    $scope.project.update(function() {
      $location.path('/');
    });
  };
}

通常
表示调用函数的上下文


在您的例子中,这个函数本身是独立的,因此
这个
表示当前浏览器窗口/文档

通常
这个
表示调用函数的上下文


在你看来,这个函数本身是独立的,因此
这个
表示当前的浏览器窗口/文档我假设这个函数实际上是一个要实例化的对象。我想您会在代码中找到类似var myeditctrl=neweditcontrol(…)的内容。在这种情况下,这是指myeditctrl对象。

我假设该函数实际上是一个要实例化的对象。我想您会在代码中找到类似var myeditctrl=neweditcontrol(…)的内容。在这种情况下,这是指myeditctrl对象。

那么,
typeof
总是打印变量的类型,如果
this
是EditCtrl,那么它仍然是一个对象,因此它是正确的。记住,
typeof
永远不会告诉你对象的“类”,你应该试着完整地记录它,看看它是什么。马特奥:谢谢。那么,我如何判断一个对象是否是一个函数呢?我应该使用什么关键字或反射技巧?嗯,
typeof
总是打印变量的类型,如果
this
是EditCtrl,那么它仍然是一个对象,因此它是正确的。记住,
typeof
永远不会告诉你对象的“类”,你应该试着完整地记录它,看看它是什么。马特奥:谢谢。那么,我如何判断一个对象是否是一个函数呢?我应该使用什么关键词或反射技巧?我已经编辑了我的帖子。我猜“这”一定是指模块…我已经编辑了我的帖子。我猜“这”一定是指模块…拉布:我编辑了这篇文章。拉布:我编辑了这篇文章。