首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在javascript OOP中正确使用它

如何在javascript OOP中正确使用它
EN

Stack Overflow用户
提问于 2015-08-19 09:31:16
回答 2查看 64关注 0票数 0

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

代码语言:javascript
运行
复制
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中,如下所示:

代码语言:javascript
运行
复制
this.someVar = 'something';

或者我应该使用var:

代码语言:javascript
运行
复制
var someVar = 'something';

如果我将在MyObject的其他部分使用someVar,我认为最好的方法是使用这个方法,如果我只在_doSomething方法的作用域中使用,我应该改变。

但这只是我的观点,我想知道最好的做法。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-08-19 09:38:58

您的假设是正确的;对于生命周期超过一个函数的任何对象,请使用this.myVar

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

但是,var myVar声明并不与任何一个对象相关联;它们在函数的生命周期中一直有效。如果你在一个函数中有一个函数,它们可以被保留,但这不是你想要的。如果你很好奇,可以查一下“闭包”这个词。

票数 -1
EN

Stack Overflow用户

发布于 2015-08-19 09:46:46

您将函数命名为_doSomething这一事实告诉我,它是IIFE的候选函数。它不能被外部访问,您可以使用foo.init()与您的对象进行交互;

编辑:已更改的侦听器,根据注释

jsfiddle

代码语言:javascript
运行
复制
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();
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32085134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档