gpt4 book ai didi

javascript - 调用通过构造函数传入的函数时,我可以避免在 Typescript 中使用单词 "this"吗?

转载 作者:数据小太阳 更新时间:2023-10-29 05:26:10 26 4
gpt4 key购买 nike

我有:

class AdminHomeController {

private config1; // I tried different variations here but none worked
public config2; //

constructor(
private $scope: IAdminHomeControllerScope
) {
this.config = $scope.config; // << this works
}

static $inject = [
'$scope'
];

configChanged = (clear) => {
this.config.clear();
};

}

此代码有效,this.config 具有我需要的所有方法。但是有没有办法我可以删除对 this 的需要吗?我希望能够编写以下代码:

configChanged = (clear) => {
config.clear();
};

我尝试了许多不同的变体,但我无法让它工作。

这是更改为 Typescript 之前相同代码的示例:

angular.module('admin')
.controller('AdminHomeController', [
'$http',
'$q',
'$scope',
'utilityService',
adminHomeController]);

function adminHomeController(
$http,
$q,
$scope,
utilityService
) {

var app = $scope.app;
var config = app.config;
var home = this;
var util = utilityService;

home.autoSave = false;
home.data = {};
home.entityType = null;
home.forms = { grid: null, modal: null };
home.grid = { view: [], data: [] };
home.modal = { visible: false };
home.row = {};
home.rowSelected = null;

home.configChanged = function (clear) {
config.put();
if (clear) {
home.grid.backup = [];
home.grid.data = [];
}
};

最佳答案

正如 djechilin 所说:

If you omit "this," the interpreter will simply look for the variable name in local, closured and global scopes, not actually look up object properties

因此,您可以在 TypeScript 中通过将函数 定义 移动到构造函数的主体中(您可以在其中访问封闭的 $scope 变量)来实现这一点。这里我们也关闭了config,然后在函数中使用:

class AdminHomeController {

configChanged: ()=>void; // Need to declare the function

constructor(private $scope: any) {
var config = $scope.config;
this.configChanged = ()=> { // And then assign it
config.clear();
};
}
}

如您所见,它并不优雅。您有函数定义+声明拆分。此外,构造器主体变得不必要地沉重。

TypeScript 并不是罪魁祸首。这只是 JavaScript。

关于javascript - 调用通过构造函数传入的函数时,我可以避免在 Typescript 中使用单词 "this"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24977814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com