我在ExtJS源代码中找到了这种模式.
method: function() {
var me = this;
...
me.someOtherMethod();
}
Run Code Online (Sandbox Code Playgroud)
他们为什么不使用this
?总是经常定义me
(在不必输入2个字符之外)是否有一些优势?我可以理解他们是否试图通过闭包来维护上下文,但它是在没有闭包的地方完成的.
Ext.panel.Panel的一个例子:
disable: function(silent) {
var me = this;
if (me.rendered) {
me.el.addCls(me.disabledCls);
me.el.dom.disabled = true;
me.onDisable();
}
me.disabled = true;
if (silent !== true) {
me.fireEvent('disable', me);
}
return me;
},
Run Code Online (Sandbox Code Playgroud)
jfr*_*d00 38
如果你的库在没有嵌入式闭包/回调可能有自己值的地方这样做this
,那么这只是他们决定在他们的方法中遵循的"练习"或"风格"或"约定".总是没有编程理由.
在您已经添加到您的问题的特定编码示例中,除了常见的编码风格之外,我没有理由知道.此代码将在略小的代码中生成相同的结果:
disable: function(silent) {
if (this.rendered) {
this.el.addCls(this.disabledCls);
this.el.dom.disabled = true;
this.onDisable();
}
this.disabled = true;
if (silent !== true) {
this.fireEvent('disable', this);
}
return this;
},
Run Code Online (Sandbox Code Playgroud)
当涉及回调或闭包时,这通常是因为在方法内部仍然需要引用的this
回调,但是那些回调将具有它们自己的值,this
因此分配:
var me = this;
Run Code Online (Sandbox Code Playgroud)
或者更常见于我见过的其他代码:
var self = this;
Run Code Online (Sandbox Code Playgroud)
是一种保留对该对象的访问权限的方法,即使在具有不同值的回调中也是如此this
.
这是一个通用的例子:
document.getElementById("myButton").onclick = function () {
var self = this; // save reference to button object use later
setTimeout(function() {
// "this" is not set to the button inside this callback function (it's set to window)
// but, we can access "self" here
self.style.display = "none"; // make button disappear 2 seconds after it was clicked
}, 2000);
};
Run Code Online (Sandbox Code Playgroud)
Dan*_*ite 24
一个原因是因为缩小,me
可以变得比短this
.