当前位置: 首页 > 面试题库 >

在JavaScript中创建自定义回调

耿永寿
2023-03-14
问题内容

我需要做的就是在当前函数执行结束时执行一个回调函数。

function LoadData() 
{
    alert('The data has been loaded');
    //Call my callback with parameters. For example,
    //callback(loadedData , currentObject);
}

此功能的使用者应如下所示:

object.LoadData(success);

function success(loadedData , currentObject) 
{
  //Todo: some action here 
}

我该如何实施?


问题答案:

实际上,您的代码将按原样工作,只需将回调声明为参数即可,您可以使用参数名称直接调用它。

基础知识

function doSomething(callback) {
    // ...

    // Call the callback
    callback('stuff', 'goes', 'here');
}

function foo(a, b, c) {
    // I'm the callback
    alert(a + " " + b + " " + c);
}

doSomething(foo);

那会叫doSomething,这会叫foo,这会提醒“东西在这里”。

请注意,传递函数 引用
foo)而不是调用函数并传递其结果(foo())非常重要。在您的问题中,您可以正确执行此操作,但是值得指出,因为这是一个常见错误。

更高级的东西

有时您想调用回调,以便它看到的特定值this。您可以使用JavaScript call函数轻松地做到这一点:

function Thing(name) {
    this.name = name;
}
Thing.prototype.doSomething = function(callback) {
    // Call our callback, but using our own instance as the context
    callback.call(this);
}

function foo() {
    alert(this.name);
}

var t = new Thing('Joe');
t.doSomething(foo);  // Alerts "Joe" via `foo`

您还可以传递参数

function Thing(name) {
    this.name = name;
}
Thing.prototype.doSomething = function(callback, salutation) {
    // Call our callback, but using our own instance as the context
    callback.call(this, salutation);
}

function foo(salutation) {
    alert(salutation + " " + this.name);
}

var t = new Thing('Joe');
t.doSomething(foo, 'Hi');  // Alerts "Hi Joe" via `foo`

有时将要给回调函数的参数作为数组而不是单独传递是有用的。您可以使用以下apply方法:

function Thing(name) {
    this.name = name;
}
Thing.prototype.doSomething = function(callback) {
    // Call our callback, but using our own instance as the context
    callback.apply(this, ['Hi', 3, 2, 1]);
}

function foo(salutation, three, two, one) {
    alert(salutation + " " + this.name + " - " + three + " " + two + " " + one);
}

var t = new Thing('Joe');
t.doSomething(foo);  // Alerts "Hi Joe - 3 2 1" via `foo`


 类似资料:
  • 问题内容: 出于某种原因,在以下代码段中似​​乎无法使用构造函数委托: 运行此给出。关于为什么的任何想法,或者是否有更好的方法来创建新的子类?我不知道的本地构造函数存在问题吗? 问题答案: 更新您的代码以将原型分配给Error.prototype和instanceof以及您的assert工作。 但是,我只是抛出您自己的对象并只检查name属性。 根据评论进行编辑 在查看了注释并试图记住为什么要分配

  • 问题内容: 有没有一种方法可以JButton用您自己的按钮图形而不是仅在按钮内部创建图像? 如果没有,是否还有另一种方法可以JButton在Java中创建自定义? 问题答案: 当我第一次学习Java时,我们不得不制造Yahtzee,我认为创建自定义的Swing组件和容器会很酷,而不仅仅是在一个组件上绘制所有内容JPanel。Swing当然,扩展组件的好处是能够添加对键盘快捷键和其他辅助功能的支持,

  • 有人能帮我创建balow图像剪切搜索栏吗?我已经用自定义拇指和分段文本浏览过SeekBar,还有SeekBar拇指位置问题 但是我没有成功创建我的客户搜索栏,请帮助我

  • 问题内容: 我不知道最好的方法是创建具有属性和方法的JavaScript对象。 我看过一些示例,该示例中的人员使用然后在所有功能中使用以确保范围始终正确。 然后,我看到了用于添加属性的示例,而其他示例则是内联的。 有人可以给我一个带有某些属性和方法的JavaScript对象的正确示例吗? 问题答案: 有两种用于在JavaScript中实现类和实例的模型:原型方式和闭包方式。两者都有优点和缺点,并且

  • 问题内容: 我正在使用Axis2 1.5.2和Eclipse。我正在使用Eclipse从生成的WSDL生成WSDL和客户端代码。 我创建了一个服务可以抛出的自定义异常。创建Web服务时一切正常。Web服务成功启动,并且可以通过指向Web浏览器来查看生成的WSDL。但是,当我告诉Eclipse使用生成的WSDL生成客户端代码时,我从Eclipse中得到了以下错误: 我的自定义异常是“ InsertU

  • 我正在使用Spring Boot创建一个访问数据库的简单web应用程序。通过在中设置属性,我利用了DataSource的自动配置功能。这一切都很出色,而且非常快--伟大的工作伙计们@Spring! 我公司的政策是不应该有明文密码。因此,我需要对进行加密。经过一番深入研究,我决定创建一个实现,该实现创建一个jasypt,如下所示: 然后,我用文件将其打包到它自己的jar中,如下所示: 当在maven