在 Javascript 中委托函数调用
Delegating a function call in Javascript
在 Javascript 中有没有办法像 c# 中那样拥有委托?
C# 中的示例
Object.onFunctionCall = delegate (vars v) {
Console.WriteLine("I can do something in this private delegate function");
};
我想让我的 Javascript 让我的主要对象在很长一段时间内做一些事情,并偶尔拍摄一个代表来提供一点更新。所有这些都无需更改我的 class 的代码本身来针对网页进行调整。
function mainObject() {
this.onUpdate = function() { //Potentially the delegate function here
}
}
var a = new mainObject();
a.onUpdate = Delegate {
$(".myText").text("Just got a delegate update");
}
我不知道它是否足够清楚.. 还没有找到这方面的资源所以我想没有办法这样做?
注意:我不是在研究 jquery Click delegates 事件,而是在委托函数调用,就像它在 c# 中的工作方式一样
告诉我
您要找的是 "Observer Pattern",如前所述。 here.
但是由于您对 jQuery 感兴趣,所以您不必费心为自己编写观察者模式。 jQuery 已经在其 .on() method 的伪装下实现了一个观察者,它可以在 jQuery 集合上调用,以在每次调度本机或自定义事件时触发回调函数.
这是一个例子:
$(function() {
//attach a custom event handler to the document
$(document).on('valueChange', function (evt) {
$(this).find("#s0").text(evt.type);
$(this).find("#s1").text(evt.value);
$(this).find("#s2").text(evt.change);
$(this).find("#s3").text(evt.timestamp).toLocaleString();
});
//customEvent(): a utility function that returns a jQuery Event, with custom type and data properties
//This is necessary for the dispatch an event with data
function customEvent(type, data) {
return $.extend($.Event(type||''), data||{});
};
//randomUpdate(): fetches data and broadcasts it in the form of a 'changeValue' custom event
//(for demo purposes, the data is randomly generated)
function randomUpdate() {
var event = customEvent('valueChange', {
value: (10 + Math.random() * 20).toFixed(2),
change: (-3 + Math.random() * 6).toFixed(2),
timestamp: new Date()
});
$(document).trigger(event);//broadcast the event to the document
}
});
Here's a demo,包含 "start" 和 "stop" 按钮,用于定期 "interval" 发送自定义事件。
备注
- 在某些情况下,将事件分别广播到四个数据跨度可能更合适。
- 在网络上,您会发现提到了一种更方便的
jQuery.event.trigger({...})
语法。不幸的是,这是 jQuery 的一个未记录的功能,它在 v1.9 或附近消失了。
虽然最初的问题是通过解决根本问题(观察者 - 模式)来解决的,但有一种方法可以在 JavaScript 中实现委托。
C# 委托模式在本机 JavaScript 中可用,使用上下文绑定。 JavaScript 中的上下文绑定是通过 .call 方法完成的。该函数将在第一个参数给出的上下文中调用。
示例:
function calledFunc() {
console.log(this.someProp);
}
var myObject = {
someProp : 42,
doSomething : function() {
calledFunc.call(this);
}
}
myObject.doSomething();
// will write 42 to console;
在 Javascript 中有没有办法像 c# 中那样拥有委托?
C# 中的示例
Object.onFunctionCall = delegate (vars v) {
Console.WriteLine("I can do something in this private delegate function");
};
我想让我的 Javascript 让我的主要对象在很长一段时间内做一些事情,并偶尔拍摄一个代表来提供一点更新。所有这些都无需更改我的 class 的代码本身来针对网页进行调整。
function mainObject() {
this.onUpdate = function() { //Potentially the delegate function here
}
}
var a = new mainObject();
a.onUpdate = Delegate {
$(".myText").text("Just got a delegate update");
}
我不知道它是否足够清楚.. 还没有找到这方面的资源所以我想没有办法这样做?
注意:我不是在研究 jquery Click delegates 事件,而是在委托函数调用,就像它在 c# 中的工作方式一样
告诉我
您要找的是 "Observer Pattern",如前所述。 here.
但是由于您对 jQuery 感兴趣,所以您不必费心为自己编写观察者模式。 jQuery 已经在其 .on() method 的伪装下实现了一个观察者,它可以在 jQuery 集合上调用,以在每次调度本机或自定义事件时触发回调函数.
这是一个例子:
$(function() {
//attach a custom event handler to the document
$(document).on('valueChange', function (evt) {
$(this).find("#s0").text(evt.type);
$(this).find("#s1").text(evt.value);
$(this).find("#s2").text(evt.change);
$(this).find("#s3").text(evt.timestamp).toLocaleString();
});
//customEvent(): a utility function that returns a jQuery Event, with custom type and data properties
//This is necessary for the dispatch an event with data
function customEvent(type, data) {
return $.extend($.Event(type||''), data||{});
};
//randomUpdate(): fetches data and broadcasts it in the form of a 'changeValue' custom event
//(for demo purposes, the data is randomly generated)
function randomUpdate() {
var event = customEvent('valueChange', {
value: (10 + Math.random() * 20).toFixed(2),
change: (-3 + Math.random() * 6).toFixed(2),
timestamp: new Date()
});
$(document).trigger(event);//broadcast the event to the document
}
});
Here's a demo,包含 "start" 和 "stop" 按钮,用于定期 "interval" 发送自定义事件。
备注
- 在某些情况下,将事件分别广播到四个数据跨度可能更合适。
- 在网络上,您会发现提到了一种更方便的
jQuery.event.trigger({...})
语法。不幸的是,这是 jQuery 的一个未记录的功能,它在 v1.9 或附近消失了。
虽然最初的问题是通过解决根本问题(观察者 - 模式)来解决的,但有一种方法可以在 JavaScript 中实现委托。
C# 委托模式在本机 JavaScript 中可用,使用上下文绑定。 JavaScript 中的上下文绑定是通过 .call 方法完成的。该函数将在第一个参数给出的上下文中调用。 示例:
function calledFunc() {
console.log(this.someProp);
}
var myObject = {
someProp : 42,
doSomething : function() {
calledFunc.call(this);
}
}
myObject.doSomething();
// will write 42 to console;