我有以下格式的函数:
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
关键字。
答案 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中做了很多黑盒子。框架可能会毁了你的一切。