我在我的应用程序中使用了Object.init模式。其中init i初始化附加到对象的变量,例如:
this.someVar = 'something';
我想知道的是,如果我必须在方法_doSomething中创建一些变量,我应该将变量附加到MyObject,如下所示:
var someVar = 'something';
或者我应该使用var:
A.CallTo(() => sutMethod.Execute()).CallsBaseMethod();
我认为最好的方法是使用这个,如果我将在MyObject的其他部分使用someVar,如果我只在_doSomething方法的范围内使用,我应该使用var。
但这是我的意见,我想知道最佳做法。
感谢。
答案 0 :(得分:-1)
你的推定是正确的;使用this.myVar
表示生命周期超过一个函数的任何事物。
为了让您更好地了解其工作原理,您的对象可以将字符串键(如“myVar”)与变量相关联。 this.myVar
是this["myVar"]
的简写。可能看起来有点奇怪,但这是设置/检索JS属性的标准。
但是,var myVar
声明与任何一个对象都没有关联;它们在函数的生命周期中存活。如果你在函数内部有一个函数,它们可以被保存,但这不是你所要求的。如果你很好奇,请查看术语“闭包”。
答案 1 :(得分:-1)
你将你的函数命名为_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();