0

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を参照していると思いましたが、印刷されます!!!EditCtrlconsole.log(typeof this);object

上記のスニペットはhttp://angularjs.org/#project-jsから取得したものです

編集:これが完全なコードです。申し訳ありませんが、そもそも含めるべきだったのですが...

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('/');
    });
  };
}
4

2 に答える 2

4

通常this、関数が呼び出されるコンテキストを意味します

ここであなたの場合、この関数はそれ自体に依存しないのでthis、現在のブラウザウィンドウ/ドキュメントを意味します

于 2013-03-05T11:50:28.223 に答える
1

その関数は、実際にはインスタンス化されることを意図したオブジェクトであると思います。コードのどこかにvarmyeditctrl= new EditControl(...)のようなものが見つかると思います。その場合、これはmyeditctrlオブジェクトを参照します。

于 2013-03-05T11:55:14.130 に答える