是否有其他方法将对象引用传递给javascript匿名函数?
html是否有其他方法将对象引用传递给javascript匿名函数?,javascript,Javascript,html <input type="text" value="teste" id="1" /> 我想知道是否可以将这个传递到嵌套函数中,而不必将其保存到父函数内部的局部变量ref 测试代码在:有多种方法可以实现此目的。相反,您可以创建一个立即调用的函数表达式,并在其中传递此。但所有这些方法都基于相同的闭合原理 问题是,这个变量是调用该方法的任何变量。如果您编写obj.method(),则obj是此执行的this的值 现在,内部方法被声明为事件处理程序,而不是由您调用。事件发生时,系
<input type="text" value="teste" id="1" />
我想知道是否可以将这个
传递到嵌套函数中,而不必将其保存到父函数内部的局部变量ref
测试代码在:有多种方法可以实现此目的。相反,您可以创建一个立即调用的函数表达式,并在其中传递
此
。但所有这些方法都基于相同的闭合原理
问题是,这个
变量是调用该方法的任何变量。如果您编写obj.method(),则obj
是此执行的this
的值
现在,内部方法被声明为事件处理程序,而不是由您调用。事件发生时,系统将调用它。您永远无法确定将使用什么对象来调用该方法
因此,如果您想在这个处理程序中引用外部这个,最好将其保存为局部变量。内部函数将充当它的闭包,变量将很容易访问
顺便说一句,我在上面写的生活变化:
function classe() {
this.nome = "rodrigo";
this.setup = function() {
(function(ref){
$("#1").keydown(function (event) {
if (event.keyCode == 13) {
$(this).attr("value", ref.nome);
}
})
})(this);
}
}
你真的可以
如果使用,此
不会更改
同时,在ES5中,您可以使用:
你这样做有什么问题吗?我想你应该把var ref=this
行放在this.setup=function
上面,没有什么问题。我想知道这是不是唯一的办法!毫无疑问,还有其他方法,但没有一种方法像上述方法那样简单和广泛使用。如前所述,我唯一的改变是在对象范围的顶层创建局部变量。(当然也可以使用函数(){}.bind(this)
方法)OK@smokeyppp。谢谢
function classe() {
this.nome = "rodrigo";
this.setup = function() {
(function(ref){
$("#1").keydown(function (event) {
if (event.keyCode == 13) {
$(this).attr("value", ref.nome);
}
})
})(this);
}
}
class classe() { //Real class definition in JS!
constructor(){
this.nome = "rodrigo";
}
setup() {
$("#1").keydown((event) => {
if (event.keyCode == 13) {
$(this).attr("value", ref.nome);
}
})
}
}
var obj = new classe();
obj.setup();
function classe() {
this.nome = "rodrigo";
this.setup = function() {
var ref = this;
$("#1").keydown(function (event) {
if (event.keyCode == 13) {
$(this).attr("value", ref.nome);
}
}.bind(this));
};
}
var obj = new classe();
obj.setup();