我是Javascript和OpenUI5的新手。 我正在浏览openUi5网站上的演练演示OpenUI5 walkthrough demo
我通过以下代码来了解:
sap.ui.define([
"sap/ui/core/UIComponent",
"sap/ui/model/json/JSONModel",
"sap/ui/demo/wt/controller/HelloDialog"
], function (UIComponent, JSONModel, HelloDialog) {
"use strict";
return UIComponent.extend("sap.ui.demo.wt.Component", {
metadata : {
manifest : "json"
},
init : function () {
// call the init function of the parent
UIComponent.prototype.init.apply(this, arguments);
// set data model
var oData = {
recipient : {
name : "World"
}
};
var oModel = new JSONModel(oData);
this.setModel(oModel);
// set dialog
this._helloDialog = new HelloDialog(this.getRootControl());
},
openHelloDialog : function () {
this._helloDialog.open();
}
});
});
我怀疑行this._helloDialog = new HelloDialog(this.getRootControl());
如果未定义_helloDialog
并且我们使用的是严格模式,那么系统为什么不抛出_helloDialog is undefined
消息?
答案 0 :(得分:1)
_helloDialog
是this
(控制器)的属性,在创建对象时不需要初始化属性。
"use strict"
var example = {};
example.newProperty = "i am a new property"; //This is absolutely correct
undefinedVariable = 1; // This is going to throw an error
严格模式会阻止您隐式创建全局变量(如undefinedVariable = 1;
所做)。但它不会阻止向对象添加属性。
如果您对阻止创建属性感兴趣,建议您阅读Freeze vs Seal