我应该在我的JavaScript应用程序中创建访问器方法吗?

Should I create accessor methods in my JavaScript app

本文关键字:访问 方法 创建 我的 JavaScript 应用程序 我应该      更新时间:2023-09-26

我用这个形式来构建我的JS代码

window.APP = window.APP || (function (global) {'use strict';
    return {
        operation: '',
        operand: 0,
        result: '',
        init: function () {
        }
    };
}(window.document));

有更好的方法如下:

var APP = APP || (function (global) {
    return {
        init: function () {
        }
    };
}(window.document));

但这样 JSLint 抱怨 APP 在 APP 的第二次调用中没有初始化,具体来说这部分:"var APP = APP"所以窗口。APP工作,JSLint在窗口命名空间中找到APP对象。

如果您检查第一个代码块,我有三个应用程序范围的属性,操作数,操作数和结果。我需要这三个可访问的子函数和子对象。到目前为止,我使用此表单来访问它们:

window.APP.operand = global.getElementById("operand").value;

这有效,但问题是,代码整体看起来非常丑陋,并且杂乱无章,充满了额外的不必要的文本。在我的 250 行代码中,我有这个"窗口"。APP"前缀无处不在。

我的问题是,我应该创建特殊的访问器方法来获取/设置这些属性中的每一个,或者是否有更好的方法来避免该窗口。APP前缀?

让我知道你的想法。

您应该能够混合使用这两种方法并使用

var APP = window.APP || (function(doc) { "use strict";
    …
    return {…};
}(document));

似乎很有希望:

var APP = APP || (function (global) {
    var operand = 0,
        operation = '',
        result = '';
    return {
        init: function () {
        }
    };
 }(window.document));

不过必须尝试一下。我之后定义了一些对象,例如

 APP.namespace('Aritmetic', {
     // properties/methods
 }); 

命名空间函数创建 APP 的子对象。在上面的例子中,Aritmetic 将成为 APP 的子对象,并将包含在 namespace() 函数的第二个参数中定义的所有属性方法。

我将命名空间函数的第二个参数更改为:

APP.namespace('Aritmetic', (function () {
     var parent = window.APP;
     return {
          test: function () {
              parent.operand = "2"; // all properties/methods from window.APP are accessible trough parent. 
          }
     };
}());

这可能不是解决问题的最优雅的解决方案,但它有效。如果有人知道更好的解决方案,请告诉我。