gpt4 book ai didi

javascript - 道格拉斯克罗克福德的 "Javascript: The Good Parts"第 5.5 章

转载 作者:数据小太阳 更新时间:2023-10-29 04:39:19 25 4
gpt4 key购买 nike

我正在阅读书名中的第 5.5 章。我仍然无法理解如何使用本章中的 eventuality 函数“我们可以用零件集组合对象”。

对象是否由具有“on”和“fire”功能的事件系统组成?

本书下面部分的代码:

var eventuality = function (that) {
var registry = {};
that.fire = function (event) {
// Fire an event on an object. The event can be either
// a string containing the name of the event or an
// object containing a type property containing the
// name of the event. Handlers registered by the 'on'
// method that match the event name will be invoked.
var array,
func,
handler,
i,
type = typeof event === 'string' ?
event : event.type;
// If an array of handlers exist for this event, then
// loop through it and execute the handlers in order.
if (registry.hasOwnProperty(type)) {
array = registry[type];
for (i = 0; i < array.length; i += 1) {
handler = array[i];
// A handler record contains a method and an optional
// array of parameters. If the method is a name, look
// up the function.
func = handler.method;
if (typeof func === 'string') {
func = this[func];
}
// Invoke a handler. If the record contained
// parameters, then pass them. Otherwise, pass the
// event object.
func.apply(this,
handler.parameters || [event]);
}
}
return this;
};
that.on = function (type, method, parameters) {
// Register an event. Make a handler record. Put it
// in a handler array, making one if it doesn't yet
// exist for this type.
var handler = {
method: method,
parameters: parameters
};
if (registry.hasOwnProperty(type)) {
registry[type].push(handler);
} else {
registry[type] = [handler];
}
return this;
};
return that;
}

最佳答案

Crockford 先生在这里的意思是,您可以实现特定的功能,例如 onfire 函数,这些函数通过调用以下函数对象来向任何对象添加事件处理使用该对象作为参数创建它们(在本例中为 eventuality)。

这里的“部分”是体现在eventuality函数对象中的一个“事件处理部分”。您可以想象添加其他功能的不同部分。这里的想法是,您可以使用该系统将此功能添加到您需要的单个对象中。这个概念叫做 Mixin (1).

另请阅读第 5 章的最后一段:

In this way a constructor could assemble objects from a set of parts. JavaScript's loose typing is a big benefit here because we are not burdened with a type system that is concerned about the lineage of classes.

(1) 谢谢 Zecc .

关于javascript - 道格拉斯克罗克福德的 "Javascript: The Good Parts"第 5.5 章,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6173780/

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