gpt4 book ai didi

javascript - 了解 JavaScript 中的事件处理和回调

转载 作者:行者123 更新时间:2023-11-28 19:33:32 25 4
gpt4 key购买 nike

我正在摆弄 IndexedDB,然后我意识到我并没有真正在 JavaScript 中进行事件处理。

所以这是代码:

var request = indexeddb.open(bla, version);

request.onsuccess = function (event) { };

因此,open-方法返回一个 IDBOpenDBRequest 对象,根据 Mozillas 网站的说法,该对象继承自 IDBRequest,除了属性和方法之外,它还具有事件处理程序,其中之一是 onsuccess:

https://developer.mozilla.org/en-US/docs/Web/API/IDBRequest.onsuccess

所以在 Mozilla 网站上,onsuccess 只是 function () { }

现在,当数据库成功打开时,onsuccess 事件将触发,并调用相应的事件处理程序,在本例中是我定义的函数,但具体是如何发生的呢?

请求变量包含一个IDBOpenDBRequest的实例。那么,当我编写 request.onsuccess = somefunction() 时,我是否会覆盖 IDBRequest 类的默认函数?

我不明白为什么我可以编写 request.onsuccess = somefunction(event) { } 以及如何将事件传递给该函数。

编辑:

function myObect() {
this.open = function(a,b,c) {
if (c > 20) {
this.success("String");
}
};
};


var myrequest = new myObect();
myrequest.open(4,2,21);
myrequest.success = function (ev) {
console.log(ev);
};

最佳答案

要创建类似的 api,您可以执行以下操作:

function open(a, b, c) {
var request = {};

if(c > 20) {
setTimeout(function() {
if(typeof request.success === "function") {
request.success("String");
}
}, 1);
}

return request;
}

var myrequest = open(4, 2, 21);
myrequest.success = function(ev) {
console.log(ev);
};

此处,setTimeout 是异步的,因此回调函数不会立即执行。当任何异步任务在 JavaScript 中运行时,当前执行的代码将在调用任何回调之前运行完成。因此,保证在调用 request.success 之前设置 success

索引数据库 open 调用类似地运行异步任务,然后在完成时调度事件,最终将调用您的回调函数。

关于javascript - 了解 JavaScript 中的事件处理和回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26318212/

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