OpenUI5演练中的this._helloDialog

时间:2017-07-26 10:06:15

标签: sapui5 walkthrough

我是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消息?

1 个答案:

答案 0 :(得分:1)

_helloDialogthis(控制器)的属性,在创建对象时不需要初始化属性。

 "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