其中关键字 "this" 指的是 sapui5

where the keyword "this" refer to in sapui5

我阅读了下面的代码并尝试理解关键字 this 指的是哪个对象。

 sap.ui.define([
   "sap/ui/core/mvc/Controller",
   "sap/m/MessageToast",
   "sap/ui/model/json/JSONModel"
], function (Controller, MessageToast, JSONModel) {
   "use strict";
   return Controller.extend("myAppAddress.controller.App", {
      onInit : function () {
         // set data model on view
         var oData = {
            recipient : {
                name : "World"
            }
         };
         var oModel = new JSONModel(oData);
         this.getView().setModel(oModel);
      },
      onShowHello : function () {
         MessageToast.show("Hello World");
      }
   });
});

enter image description here

据我理解,这应该是指扩展控制器“myAppAddress.controller.App”。正如我检查过的附加调试器屏幕截图,它本身不包含 onInit 和 onShowHello 方法,但在其上层。我的理解有什么问题?如果有人能给出答案,在此先感谢。

首先,根据您的评论,this 并不总是指调用函数的对象。它可以通过多种方式进行更改。它指的是函数运行的上下文,通常是调用对象,但这根本不能保证。这是正确的,但我觉得我应该指出来。

其次,Controller.extend中的extend关键字没有扩展Object,它扩展了class原型。 _oView 是控制器对象的 属性,但 onInit 是原型上的函数。因为你的对象也是一个实例化的class,它通过原型class接收与class关联的所有方法。

您在调试器中查看的 local 部分仅引用当前局部范围内的变量,其中包括通用 this,以及变量 oDataoModel,因为您在本地范围内创建了这些。它们不是对象的一部分,但您可以在构建 onInit 函数时使用它们。

这些是 JavaScript 值得研究的调用概念