如何在javascript OOP中正确使用它

时间:2015-08-19 01:31:16

标签: javascript oop

我在我的应用程序中使用了Object.init模式。其中init i初始化附加到对象的变量,例如:

this.someVar = 'something';

我想知道的是,如果我必须在方法_doSomething中创建一些变量,我应该将变量附加到MyObject,如下所示:

var someVar = 'something';

或者我应该使用var:

A.CallTo(() => sutMethod.Execute()).CallsBaseMethod();

我认为最好的方法是使用这个,如果我将在MyObject的其他部分使用someVar,如果我只在_doSomething方法的范围内使用,我应该使用var。

但这是我的意见,我想知道最佳做法。

感谢。

2 个答案:

答案 0 :(得分:-1)

你的推定是正确的;使用this.myVar表示生命周期超过一个函数的任何事物。

为了让您更好地了解其工作原理,您的对象可以将字符串键(如“myVar”)与变量相关联。 this.myVarthis["myVar"]的简写。可能看起来有点奇怪,但这是设置/检索JS属性的标准。​​

但是,var myVar声明与任何一个对象都没有关联;它们在函数的生命周期中存活。如果你在函数内部有一个函数,它们可以被保存,但这不是你所要求的。如果你很好奇,请查看术语“闭包”。

答案 1 :(得分:-1)

你将你的函数命名为_doSomething,这告诉我它是IIFE的候选者。外部无法访问它,您可以使用foo.init();

与您的对象进行交互。

编辑:根据评论更改了侦听器

jsfiddle

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();