【发布时间】:2014-11-03 20:34:25
【问题描述】:
这是一个关于性能和最佳实践的问题。
假设我有一个封装了大量辅助方法的js对象。该对象被视为一个静态类,这意味着它永远不会被实例化,它的所有方法基本上都是辅助方法。
使用事件和 jQuery 时,对象的 this 范围不断变化,并且由于它具有相当多的方法,我想知道最佳实践是什么 - 在每个方法的开头将 this 保存到 _this 或简单地使用对象名称MyObject。
多年来,当谈到单例/静态对象时,我一直在做这两件事,但我认为必须只有一种最佳实践,现在是时候采用最佳方法了。
我目前的研究表明,使用_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();
感谢您的帮助!
【问题讨论】:
标签: javascript jquery oop this encapsulation