在我在一个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上的任何书籍吗?
答案 0 :(得分:0)
php artisan serve
将变量绑定到函数的范围,以便var
绑定到函数var self
,constructor
只是包装器将多个函数组合在一起成为一个类,但没有为变量定义一个范围。
除此之外,您无法在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
。