【问题标题】:Shortening the Object name inside the member method in JavaScript在 JavaScript 中缩短成员方法内的对象名称
【发布时间】:2012-01-16 21:39:12
【问题描述】:

我正在使用 Object Literal 模式编写大量 JavaScript 小部件和小应用程序。

我要做的一件事是在其中一种方法中,我将应用程序名称缩写为“app”。

我这样做主要是因为它更容易编写,而且我知道性能提升很小。

    var ApplicationName = {
       property : "foo",
       methodOne : function(){
          var app = ApplicationName;
          return app.property;
       },
       init: function(){
          var app = ApplicationName;
          app.methodOne();
       }
    }
ApplicationName.init();

这种方法有什么问题吗?

【问题讨论】:

    标签: javascript javascript-framework


    【解决方案1】:

    我认为您的方法没有任何问题,但这并不是绝对必要的(您可以进一步缩短它)。像这样调用init

    ApplicationName.init()
    

    ...将init 内的this 的值设置为ApplicationName。这允许您这样做:

    var ApplicationName = {
        property : "foo",
        methodOne : function(){
            return this.property;
        },
        init: function(){
            return this.methodOne();
        }
    }
    

    【讨论】:

    • 我被“this”关键字挂断了。 “this”指的是函数被应用到的对象,对吧?
    • 函数内this的值由函数的调用方式决定。每当您将函数作为对象上的方法调用时,该函数内的this 的值就是调用该方法的对象。更多阅读:developer.mozilla.org/en/JavaScript/Reference/Operators/this
    【解决方案2】:

    您的方法没有问题。我不知道以下模式是否也可以帮助您:

    var ApplicationName = (function () {
        var app;
        return {
            property: "foo",
            methodOne: function() {
                return app.property;
            },
            init: function() {
                app = ApplicationName;
                app.methodOne();
            }
        }
    })();
    
    ApplicationName.init();
    
    console.log(ApplicationName.property); // "foo"
    

    这样您只需给ApplicationName 起别名一次。这确实意味着必须首先调用init() 方法,但我想还是这样:-)

    【讨论】:

    • @Raynos - 这看起来像坏代码吗?这是 JavaScript 中非常常见的模式。
    • 获得appApplicationName 之间的性能差异可以忽略不计。同样在init 中设置app = ApplicationName 感觉相当难看。如果是return (app = { ... })就更好了
    • @Raynos 感谢您的反馈。
    • 啊,有道理。谢谢。
    【解决方案3】:

    这种方法没有问题。事实上,建议使用较小的 javascript 文件,因为它们可以节省服务器和客户端的时间和带宽。但是,如果您介意站点中的小文件,您最好使用网络上可用的几种工具之一来压缩您的 javascript,而不是应用如此小的更改。如果您有一个具有 Ctrl+Space(即自动完成!)功能的良好 IDE,那么将它们全部输入应该不难。您可以将压缩留给压缩工具。

    你说的性能提升可能只有几毫秒,所以通常人们也不介意这一点。

    总体而言,您编写的内容是安全的,但性能或文件大小没有显着变化,因此人们愿意与否。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 2012-03-31
      • 2023-03-27
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      相关资源
      最近更新 更多