1

我是 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

4

1 回答 1

3

_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

于 2017-07-26T14:29:02.947 回答