其中关键字 "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
,以及变量 oData
和 oModel
,因为您在本地范围内创建了这些。它们不是对象的一部分,但您可以在构建 onInit
函数时使用它们。
这些是 JavaScript 值得研究的调用概念
我阅读了下面的代码并尝试理解关键字 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
,以及变量 oData
和 oModel
,因为您在本地范围内创建了这些。它们不是对象的一部分,但您可以在构建 onInit
函数时使用它们。
这些是 JavaScript 值得研究的调用概念