这是一个关于性能和最佳实践的问题。Javascript static/singelton - this vs _this vs object name
假设我有一个js对象,它封装了大量的辅助方法。该对象被视为静态类,这意味着它永远不会实例化,它的所有方法基本上都是辅助方法。 当使用事件和jQuery时,对象的this
作用域不断变化,并且由于它有相当多的方法,我在想什么是最佳做法 - 在每个方法的开始将this
保存为_this
,或者仅使用对象名称MyObject
。
多年来,我一直在做这两个,当谈到singelton /静态对象,但我认为必须有一个最佳实践,是时候采取最好的方法。
我目前的研究表明,来用_this
而不是直接调用MyObject
的好处主要有两个:
- 如果对象的名称更改,
_this
永远是可行的 - 可能更快(虽然没有看到性能测试结果),因为浏览器保持在相同的范围内,并且不需要每次都找出
MyObject
的范围。使用MyObject
的
优点:
- 更少的代码编写。
- 垃圾收集管理? (少变量分配)
- 可能对一些开发商(其中多个
this
适用)更具可读性 - 更容易重构代码,因为
MyObject
永远是可行的
我想知道是否有一种方法全局保存_this
(只在对象的范围内),并避免在每个方法的开始处分配它。如果没有 - 是否还有其他我缺少的优点/缺点,或者直接调用对象名称被认为是不好的做法。
这是一个简化的参考对象(真实对象有更多的方法)。
var MyObject = {
init: function() {
this.registerEvents();
//other stuff
},
registerEvents: function() {
this.registerOnSomeEvent();
//registering more events..
//...
},
registerOnSomeEvent: function() {
var _this = this;
jQuery('#someid').click(function() {
_this.doSomething();//option 1
MyObject.doSomething();//option 2
});
},
doSomething: function() {
//doing something...
}
}
MyObject.init();
谢谢你的帮忙!
我喜欢这个解决方案,但由于我们再次使用'self'作为对象名称,它真的和直接调用'MyObject'完全不同吗?性能明智我的意思 – Yani 2014-11-03 20:58:06
@Yani老实说,除非你正在访问变量1000s甚至每秒甚至数百万次,这并不重要。您应该首先优化可读性和减少错误。 – 2014-11-03 21:05:43
@Yani没有意义的性能差异。嵌入式引用全局变量的主要优点在于,通过这种方法,'self'不能改变 - 全局变量可能会发生变化。 – Pointy 2014-11-03 21:25:33