Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.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_Jquery - Fatal编程技术网

Javascript 将事件附加到对象/数组

Javascript 将事件附加到对象/数组,javascript,jquery,Javascript,Jquery,比如说,你有一个数组 //Defined at the top of your class myArray = []; //Then somewhere else in the code myArray["unique_id"] = {example: true, example2: false, etc..}; //somewhere else delete myArray["unique_id"]; 有没有可能有这样的东西: //when adding myArray["uni

比如说,你有一个数组

 //Defined at the top of your class
 myArray = [];
 //Then somewhere else in the code
 myArray["unique_id"] = {example: true, example2: false, etc..};
 //somewhere else
 delete myArray["unique_id"];
有没有可能有这样的东西:

//when adding
myArray["unique_id"] = {example: true, example2: false, etc..};
myArray.trigger("array:update");
//when deleting
delete myArray["unique_id"];
myArray.trigger("array:delete");

//and in a different file or somewhere else down the path
myArray.on("array:update", function(){
   //do stuff
});

//and in a different file or somewhere else down the path
myArray.on("array:delete", function(){
   //do stuff
});
我喜欢定制的活动系统,我想知道这是否可行。在该特定应用程序的文档中未找到示例。 基本上是将自定义事件附加到数组/对象,而不一定是dom元素。

这可以使用,但必须首先使对象模拟:

//在类的顶部定义
设myObject={};
//模拟事件发射器
myObject._events={};
myObject.emit=函数emit(事件,…参数){
(此._事件[事件]| |[]).forEach(回调=>{
callback.apply(此参数为args);
});
};
myObject.on=函数开启(事件、回调){
如果(!this.\u事件[事件]){
此._事件[事件]=[];
}
此.u事件[event].push(回调);
};
//定义代理
让myProxy=新代理(myObject{
设置(目标、名称、值){
target.emit('update',name,value);
返回(目标[名称]=值);
},
deleteProperty(目标、名称){
target.emit('delete',name);
返回(删除目标[名称]);
}
});
//在另一个文件或路径上的其他地方
myObject.on('update',函数(名称、值){
日志('update',this,name,value);
});
//在另一个文件或路径上的其他地方
myObject.on('delete',函数(名称){
console.log('delete',this,name);
});
//然后在代码中的其他地方
myProxy[“唯一的\u id”]={
例子:没错,
例2:错
};
//其他地方

删除myProxy[“唯一的_id”]否如果不在更新时手动调用触发器或在删除时手动调用删除,则无法执行此操作。您可以将这些行为包装在一个调用中,然后当您进行调用时,所有行为都会同时发生,但它仍然需要自定义设置。如果我创建了一个类似
$(“”)
的虚拟div,然后在其上侦听自定义事件,会怎么样。这是可以接受的黑客攻击吗?您确定要使用
数组
<代码>删除myArray[“唯一_id”]看起来您想要使用常规对象。数组使用索引
0..n
存储项,而不是使用字符串作为索引,从数组中删除元素不是使用
delete
完成的。只需使用{}更改第一行即可。我总是忘记与php的区别,数组是多功能的。你最可能寻找的。但是您需要手动
触发
删除
更新
事件。