在变量中定义'this'关键字

时间:2014-11-11 09:17:57

标签: javascript

我有以下格式的函数:

var obj = {
    doSomething: function(){
        this.callSomething();
    },
    callSomething: function(){
        this.doThis();
        this.andDoThis();
    },
    doThis: function(){
        if(!this.bln){
            this.bln = true;
        }
        // some code here
    },
    andDoThis: function(){
        if(this.bln){
            // some code here
        }
    }
}
obj.doSomething();

正如您在上面的代码中所看到的,我多次使用this关键字来调用函数或obj范围变量。

我不想使用this关键字,而是使用单字母的内容,如:

var s = this;    // so that I can use "s" instead of "this" everywhere

我该怎么做?

PS:此处obj对象名称仅用于示例目的。在实际情况中,对象名称长于this关键字。

3 个答案:

答案 0 :(得分:3)

如果您使用 module revealing module patterns ,则可以完全摆脱this

以下示例使用显示模块模式:

var module = (function() {
    var bln = false,
        doSomething = function() { callSomething(); },
        callSomething = function() { doThis(); andDoThis(); },
        doThis = function() { if (!bln) { bln = true; } },
        andDoThis = function() { if (bln) { /* do stuff */ } };

    return {
        doSomething: doSomething //Only public method, rest are private
    };

})();

module.doSomething();

答案 1 :(得分:0)

试试这个。变量名本身可以在该对象中用作this

var longName = s = {
   doSomething: function(){
       s.callSomething();
   },
   callSomething: function(){
       s.doThis();
       s.andDoThis();
   },
   doThis: function(){
       if(!s.bln){
          s.bln = true;
       }
    // some code here
   }
   ...........................
}

答案 2 :(得分:0)

嗨,可能上面的答案是正确的,但这不是一个好办法。

如果你离开“这个”,那么阅读你的代码将会更加困难。阅读“this”,你总是知道你在谈论对象实例的引用。

我能想到这可能有用的唯一原因是为每个用“s”代替的“this”减少3个字节的内存。

你必须在全局范围内定义s来实现你真正想要的东西 - 这非常危险。

你通过实现例如在javascript中做了很多黑盒子。框架可能会毁了你的一切。