我在我的应用程序中使用了Object.init模式。在init中,我初始化附加到对象的变量,例如:
var MyObject = {
init: function() {
this.element = $('.someElement');
this.element.bind('click', this._doSomething.bind(this));
},
_doSomething = function() {
// METHOD WHICH I WILL MANIPULATE THIS.ELEMENT
}
};
我想知道的是,如果我必须在_doSomething方法中创建一些变量,我是否应该将这些变量附加到MyObject中,如下所示:
this.someVar = 'something';
或者我应该使用var:
var someVar = 'something';
如果我将在MyObject的其他部分使用someVar,我认为最好的方法是使用这个方法,如果我只在_doSomething方法的作用域中使用,我应该改变。
但这只是我的观点,我想知道最好的做法。
谢谢。
发布于 2015-08-19 01:38:58
您的假设是正确的;对于生命周期超过一个函数的任何对象,请使用this.myVar
。
为了让您更好地了解这是如何工作的,您的对象可以将像"myVar“这样的字符串键与一个变量相关联。this.myVar
是this["myVar"]
的缩写。看起来可能有点奇怪,但这是设置/检索JS属性的标准。
但是,var myVar
声明并不与任何一个对象相关联;它们在函数的生命周期中一直有效。如果你在一个函数中有一个函数,它们可以被保留,但这不是你想要的。如果你很好奇,可以查一下“闭包”这个词。
发布于 2015-08-19 01:46:46
您将函数命名为_doSomething这一事实告诉我,它是IIFE的候选函数。它不能被外部访问,您可以使用foo.init()与您的对象进行交互;
编辑:已更改的侦听器,根据注释
var foo = (function(){
// private function
function doSomething() {
// METHOD WHICH I WILL MANIPULATE THIS.ELEMENT
alert('doSomething()');
}
var myObject = {
init: function() {
this.message = 'hello init';
this.element = $('.someElement');
this.element.on('click', function() { doSomething.call(this); }.bind(this));
alert(this.message);
}
};
return myObject;
})();
foo.init();
https://stackoverflow.com/questions/32085134
复制相似问题