这是一个关于性能和最佳实践的问题。
假设我有一个js对象,它封装了大量的辅助方法。该对象被视为静态类,意味着它从未被实例化,而且所有的方法都是基本上的辅助方法。 在使用事件和jQuery时,对象的
多年来,对于Singleton / Static对象,我都在两者之间进行选择,但我认为必须有一种最佳实践,并且现在是采用最佳方法的时候了。
我的当前研究显示,使用
这是一个简化的对象供参考(真正的对象有更多的方法)。
感谢您的帮助!
假设我有一个js对象,它封装了大量的辅助方法。该对象被视为静态类,意味着它从未被实例化,而且所有的方法都是基本上的辅助方法。 在使用事件和jQuery时,对象的
this
作用域会不断变化,由于它具有相当多的方法,我想知道什么是最佳实践 - 在每个方法的开头将this
保存到_this
中,还是直接使用对象名称MyObject
。多年来,对于Singleton / Static对象,我都在两者之间进行选择,但我认为必须有一种最佳实践,并且现在是采用最佳方法的时候了。
我的当前研究显示,使用
_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
有很大区别吗? - dev7self
不会改变,而全局变量可能会改变。 - Pointy