dev*_*ev7 4 javascript oop jquery encapsulation this
这是关于性能和最佳实践的问题.
假设我有一个封装了大量辅助方法的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();
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助!
您可以将整个对象封装在闭包中以实现此目的,而无需_this在每个函数上进行指定:
window.MyObject = (function () {
var self = {
init: function() {
self.registerEvents();
//other stuff
},
registerEvents: function() {
self.registerOnSomeEvent();
//registering more events..
//...
},
registerOnSomeEvent: function() {
jQuery('#someid').click(function() {
self.doSomething();//option 1
self.doSomething();//option 2
});
},
doSomething: function() {
//doing something...
}
};
self.init();
return self;
})();
Run Code Online (Sandbox Code Playgroud)