在JavaScript中缩短成员方法内的对象名

在JavaScript中缩短成员方法内的对象名,javascript,javascript-framework,Javascript,Javascript Framework,我正在使用对象文字模式编写许多JavaScript小部件和小应用程序 我要做的一件事是在其中一个方法中,我将应用程序名称缩写为“app” 我这样做主要是因为它更容易编写,而且我知道这会带来一点性能提升 var ApplicationName = { property : "foo", methodOne : function(){ var app = ApplicationName; return app.propert

我正在使用对象文字模式编写许多JavaScript小部件和小应用程序

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

我这样做主要是因为它更容易编写,而且我知道这会带来一点性能提升

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

这种方法有问题吗?

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

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()
方法,但我想它无论如何都是:-)

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

正如您所说,性能的提高可能会达到几毫秒,因此通常人们也不会介意这一点


总的来说,您编写的内容是安全的,但性能或文件大小没有重大变化,因此人们不想选择它。

我认为您的方法没有任何问题,但严格来说没有必要(您可以进一步缩短它)。像这样调用
init

ApplicationName.init()
…将
init中
this
的值设置为
ApplicationName
。这允许您执行以下操作:

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

@雷诺斯-这看起来像什么坏代码?这是JavaScript中非常常见的模式。获取
app
ApplicationName
之间的性能差异可以忽略不计。另外,在
init
中设置
app=ApplicationName
感觉相当难看。如果是
return(app={…})
@Raynos谢谢你的反馈。啊,有道理。谢谢。我被“this”关键字挂断了。“This”指的是函数所应用到的对象,对吗?函数内部的
This
的值取决于函数的调用方式。无论何时将函数作为对象上的方法调用,该函数中的
this
值就是调用该方法的对象。更多阅读: