了解javascript中的事件处理和回调
我在和IndexedDB混日子,我意识到我并没有真正用JavaScript处理事件 下面是代码:了解javascript中的事件处理和回调,javascript,javascript-events,Javascript,Javascript Events,我在和IndexedDB混日子,我意识到我并没有真正用JavaScript处理事件 下面是代码: var request = indexeddb.open(bla, version); request.onsuccess = function (event) { }; 因此,open方法返回一个IDBOpenDBRequest对象,根据Mozillas站点,该对象继承自IDBRequest,除了属性和方法之外,IDBRequest还具有事件处理程序,其中一个是onsuccess: 所以在
var request = indexeddb.open(bla, version);
request.onsuccess = function (event) { };
因此,open方法返回一个IDBOpenDBRequest对象,根据Mozillas站点,该对象继承自IDBRequest,除了属性和方法之外,IDBRequest还具有事件处理程序,其中一个是onsuccess:
所以在mozilla站点上,onsuccess就是function(){}
现在,当数据库成功打开时,“onsuccess”事件触发,并调用appropiate事件处理程序,在本例中是我定义的函数。但这究竟是怎么发生的呢
请求变量包含IDBONDDBREQUEST的一个实例。那么,当我编写request.onsuccess=somefunction()时,我是否覆盖了IDBRequest类的默认函数
我不明白为什么我可以编写request.onsuccess=somefunction(event){}
,以及如何将事件传递给该函数
编辑:
我正在重写IDBRequest类的默认函数
看起来没有默认行为,所以您只需设置自己的func
我正在重写IDBRequest类的默认函数
看起来没有默认行为,所以您只需设置自己的func
我正在重写IDBRequest类的默认函数
看起来没有默认行为,所以您只需设置自己的func
我正在重写IDBRequest类的默认函数
看起来没有默认行为,所以您只需设置自己的函数。要创建类似的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中运行任何异步任务时,当前执行的代码将在调用任何回调之前运行到完成。因此,success
保证在调用request.success
之前设置
索引的DB
open
调用类似地运行异步任务,然后在完成后分派事件,最终调用回调函数。要创建类似的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中运行任何异步任务时,当前执行的代码将在调用任何回调之前运行到完成。因此,success
保证在调用request.success
之前设置
索引的DB
open
调用类似地运行异步任务,然后在完成后分派事件,最终调用回调函数。要创建类似的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中运行任何异步任务时,当前执行的代码将在调用任何回调之前运行到完成。因此,success
保证在调用request.success
之前设置
索引的DB
open
调用类似地运行异步任务,然后在完成后分派事件,最终调用回调函数。要创建类似的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中运行任何异步任务时,当前执行的代码将在调用任何回调之前运行到完成。因此,success
保证在调用request.success
之前设置
索引的DB
open
调用类似地运行异步任务,然后在任务完成后分派事件,最终调用回调函数。好吧,在某个点上,某个调用this.onsuccess(someEventObject)
,其中此
指的是请求
对象。这里没有魔法。你到底在想什么?好吧,那么,在执行open函数的过程中,这个.onsuccess(eventobject)调用了。。。但是为什么我的代码会被执行呢?这个.onsuccess(事件)已经在“类”中预定义了,我基本上是在覆盖它,不是吗?当我编写一个对象并给它,比如说,this.test=function(item){console.log(item);},实例化该对象的人不能直接去:this.test=function(item){alert(item);};是的,它们可以。默认情况下属性是可写的。如果有对象的引用,它们可以对它做任何它们想做的事情。在我的脑海中,我想象的是编辑中的代码,但这显然是错误的……这到底是如何实现的?在调用open
之前,您必须分配到success
。嗯,在某个时候有东西调用this.onsuccess(someEventObject);
,其中this
指的是请求
对象。这里没有魔法。你到底在想什么?好吧,那么,在执行open函数的过程中,this.onsuccess(eventobject)ist调用了…但是为什么会执行我的代码呢?这个.onsuccess(事件)已经在“类”中预定义了,我基本上是在覆盖它,不是吗?当我编写一个对象并给它,比如说,this.test=function(item){console.log(item);}时,实例化该对象的人不能直接去:this.test=function(item){alert(“item);};是的,他们可以。默认情况下,属性是可写的。如果有一个对象的引用,他们可以用它做任何他们想做的事情。在我的脑海里,我想象着一些类似于我编辑中的代码的东西,但这显然是错误的。。。具体是如何实现的?在调用open
之前,您必须分配到success
。好的,在某个点上,有东西调用this.onsuccess(someEventObject)代码>,其中此
指的是