Javascript 通过本地引用传递回调

标签 javascript callback

可以在这个 JSFiddle 上看到一个例子

我正在创建一个实例,更改该实例的一个函数,然后在该实例的另一个函数中调用该函数。我在更新函数中访问局部变量和实例变量时遇到困难。

代码

var MyObj = function (name) {
    var that = this;
    MyObj.myObjs = (MyObj.myObjs || []),
    this.objName = name,
    this.objIdx = MyObj.myObjs.length;
    MyObj.myObjs.push(this.objName);

    this.doOnSetName = function () {};

    this.setName = function (name) {
        that.doOnNameSet();
        that.objName = name;
        MyObj.myObjs[that.objIdx] = name;
    }
}

var obj1 = new MyObj("obj1");
//obj1.doOnNameSet = function() { alert("objName: "+this.objName) };
//obj1.setName("obj1");

var obj2 = new MyObj("obj2");
obj2.doOnNameSet = function () {
    $("#console").append("Old objName: " + this.name
                         + "<br />New objName: " + name + "<br />")
};
obj2.setName("obj2 - changed");

$("#console ").append("Objects: <br />*" + MyObj.myObjs.join(", <br />*"));

实际结果

Old objName: undefined
New objName: result
Objects: 
*obj1, 
*obj2 - changed

期望的结果

Old objName: obj2
New objName: obj2 - changed
Objects: 
*obj1, 
*obj2 - changed

最佳答案

that.objName = name;
MyObj.myObjs[that.objIdx] = name;
that.doOnNameSet();

表示调用监听器时已经忘记了旧名称。我不确定你打算如何得到它。也许在您更改它之前调用监听器,将新名称作为参数。

obj2.doOnNameSet = function () {
     $("#console").append("Old objName: " + this.name
                          + "<br />New objName: " + name + "<br />");
};

该属性名为 objName,而 name 变量显然是未定义的。你想把它作为参数吗?

关于Javascript 通过本地引用传递回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16589439/

相关文章:

javascript - react native Swift 回调

templates - 如何在模板中获取 Meteor.call 函数的结果

javascript - strip 结帐,自定义集成 : how to detect abort?

javascript - 监听Bootstrap DatetimePicker中的点击事件

javascript - 如何在倾斜的 div 中保持功能的同时隐藏滚动条

javascript - 提供 react 后如何在移动设备上隐藏 react 文本

javascript - IOS 上的类型错误 : Not enough arguments with window. postMessage

iphone - 创建自定义 CFDictionary 回调

api - 什么是回调 API?

javascript - navigator.geolocation.getCurrentPosition 不起作用