Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有其他方法将对象引用传递给javascript匿名函数?_Javascript - Fatal编程技术网

是否有其他方法将对象引用传递给javascript匿名函数?

是否有其他方法将对象引用传递给javascript匿名函数?,javascript,Javascript,html <input type="text" value="teste" id="1" /> 我想知道是否可以将这个传递到嵌套函数中,而不必将其保存到父函数内部的局部变量ref 测试代码在:有多种方法可以实现此目的。相反,您可以创建一个立即调用的函数表达式,并在其中传递此。但所有这些方法都基于相同的闭合原理 问题是,这个变量是调用该方法的任何变量。如果您编写obj.method(),则obj是此执行的this的值 现在,内部方法被声明为事件处理程序,而不是由您调用。事件发生时,系

html

<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();