gpt4 book ai didi

javascript - var me = this; 的值是多少?

转载 作者:IT王子 更新时间:2023-10-29 03:17:53 27 4
gpt4 key购买 nike

我在整个 ExtJS 源代码中都发现了这种模式。

method: function() {
var me = this;
...
me.someOtherMethod();
}

他们为什么不直接使用this always 经常定义 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;
},

最佳答案

如果您的库在没有嵌入式闭包/回调的地方执行此操作,而这些闭包/回调可能有自己的 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;
},

当涉及回调或闭包时,通常会这样做,因为在方法内部使用了回调,他们仍然希望引用 this,但这些回调将有自己的值 this 所以分配:

var me = this;

或者在我见过的其他代码中更常见:

var self = this;

是一种保留对该对象的访问权的方法,即使在具有不同 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);
};

关于javascript - var me = this; 的值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7436709/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com