Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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_Javascript Events - Fatal编程技术网

了解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: 所以在

我在和IndexedDB混日子,我意识到我并没有真正用JavaScript处理事件

下面是代码:

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),其中
指的是