ES6中的JavaScript范围已经过去了

时间:2016-01-09 11:18:37

标签: javascript angularjs scope ecmascript-6

在我在一个Iife中定义了一个类的项目时,我意外地在构造函数中创建了一个self var。当我将一些代码从$ http.get回调中转移到函数中时,我遇到了一个问题。自变量不再是相同的范围了。在我看来,构造函数范围将与类范围相同,但事实并非如此。这只是转化的副作用还是ES6的工作方式?

为清晰起见,有些代码

(function () {
  class ServerManagementController {
    constructor($http, $scope, socket, Auth) {
      var self = this;
      this.$http = $http;
      this.$scope = $scope;
      ...
      $http.get('/api/servers').then(response => {
         //...code using self var - it became to long so I moved it out
         // into a function which broke the code and was fixed by moving
         // the var self outside of the constructor
         ...

在旁边,您会推荐ES6上的任何书籍吗?

1 个答案:

答案 0 :(得分:0)

php artisan serve将变量绑定到函数的范围,以便var绑定到函数var selfconstructor只是包装器将多个函数组合在一起成为一个类,但没有为变量定义一个范围。

除此之外,您无法在class功能之外访问self

constructor

是否相同就像你写的那样:

class ServerManagementController {
  constructor($http, $scope, socket, Auth) {
    var self = this;
  }

  anotherFunction() {
  }
}

在这两种情况下,function ServerManagementController($http, $scope, socket, Auth) { var self = this; } ServerManagementController.prototype.anotherFunction = function() { } 都无法使用self