JavaScript全局对象引用与'这'

JavaScript Global Object referencing vs 'this'

本文关键字:全局 对象引用 JavaScript      更新时间:2023-09-26

我正在开发一个作为对象文字编写的应用程序框架,为了简单起见,我想做两件事:

  1. 使对象全局可用
  2. 对所有引用使用对象名称(全局定义)(相对于使用this

所以,我做了一些测试,做了一些研究,没有找到任何不采取这种方法的好理由。我的问题是——我是不是错过了什么?Perf测试实际上似乎支持我的方法,从后勤层面来看,我没有看到任何问题。看看其他框架,我看到了一种混合,但我知道this引用受到了许多程序员的尊敬。

供参考。。。

我的方法的一个非常简单的例子:

var myobj = {
    someVal: 'foo',
    init: function(){
       // Make myobj available globally
       window.myobj = myobj;
       // Fire off a method
       myobj.doStuff();
    },
    doStuff: function(){
        // Just print out the contents...
        console.log(myobj.someVal);
    }
}
myobj.init(); 

请注意,这些引用都是全局引用,而不是this

正如我所说,我看到了这一切的混合,我想我只是想知道这是否会导致长期的问题,或者这是一场无事生非的闹剧。

就限制而言,首先想到的是您只能拥有该对象的一个实例。尝试初始化一个新对象会擦除该对象。

使用this而不是全局变量名的另一个原因是,即使变量名发生更改,this也会指向正确的对象。

如果你真的希望这是一个"创建一次"的全局对象,其名称永远不会更改,那么这种技术在技术上并没有错。但它不能用于任何其他情况。如果需求发生变化(例如,如果您使用的库与所选变量名称发生命名冲突),那么考虑编写更具适应性的代码可能更明智。

使用this可以灵活地重命名变量并在不同的上下文中传递它,而不用担心跟踪变量名。如果出现命名冲突,也可以很容易地进行更改。