gpt4 book ai didi

javascript - 如何从 Java 脚本对象中引发自定义事件

转载 作者:可可西里 更新时间:2023-11-01 01:18:31 25 4
gpt4 key购买 nike

我正在尝试更好地理解 Java 脚本中的面向对象技术。

我有以下(普通)对象。

function CustomObject () {
this.size = 1;
};

CustomObject.prototype.addSize = function () {
this.size += 1;
if(this.size > 5) {
//Raise custom Event
}
};

我是这样安装的。

   var myObject = new CustomObject();
myObject.addSize();

// Add listener for custom event from with in my Custom Object.
// Something like this....
myObject.addEventListener("CustomEvent", handelCustomEvent, false);

function handelCustomEvent() {}

如何在自定义对象中引发自定义事件,然后在父对象中监听该事件?这种事情在 Java 脚本中甚至可能吗?

最佳答案

您可以通过制作具有监听器和触发器相关功能的自定义事件类来实现。我找到了一个 good article对这个。该类是这样实现的:

//Copyright (c) 2010 Nicholas C. Zakas. All rights reserved.
//MIT License

function EventTarget(){
this._listeners = {};
}

EventTarget.prototype = {

constructor: EventTarget,

addListener: function(type, listener){
if (typeof this._listeners[type] == "undefined"){
this._listeners[type] = [];
}

this._listeners[type].push(listener);
},

fire: function(event){
if (typeof event == "string"){
event = { type: event };
}
if (!event.target){
event.target = this;
}

if (!event.type){ //falsy
throw new Error("Event object missing 'type' property.");
}

if (this._listeners[event.type] instanceof Array){
var listeners = this._listeners[event.type];
for (var i=0, len=listeners.length; i < len; i++){
listeners[i].call(this, event);
}
}
},

removeListener: function(type, listener){
if (this._listeners[type] instanceof Array){
var listeners = this._listeners[type];
for (var i=0, len=listeners.length; i < len; i++){
if (listeners[i] === listener){
listeners.splice(i, 1);
break;
}
}
}
}
};

但是,正如作者所说,这门课还没有完成。它有一些限制。所以我建议改用 jQuery。您可以通过 bind()trigger() 函数轻松使用自定义事件。关于这个有一个很好的话题。如果你看到 Custom events in jQuery? ,您将了解如何使用 jQuery 实现它。

关于javascript - 如何从 Java 脚本对象中引发自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6867283/

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