gpt4 book ai didi

JavaScript 相当于 php 的 __call

转载 作者:行者123 更新时间:2023-11-28 20:08:23 25 4
gpt4 key购买 nike

我不认为有这样的事情,因为我想我现在应该已经找到了,但唯一确定的方法就是得到一个直接的答案,因此我必须在放弃之前询问。我需要一个每次尝试访问对象的方法时都会调用的方法。 JavaScript中有这样的东西吗?

基本上,我需要在对象的每个方法之前和之后运行几行。对它们进行硬编码确实不是一个选择。我想到的另一件事是有一个像这样的主要方法

Mainmethod(ActualMethod, Parameters)

但这对我来说确实不太好,我真的不想这样做。

最佳答案

如果这仅适用于特定对象或特定类型的对象,您可以使用自己的 stub 动态替换所有方法,该 stub 执行预工作,调用原始方法,然后执行后工作。

这样的事情会起作用:

function overideMethods(obj) {
// can pass either an instantiated object (hooks existing methods on the object)
// or a function constructor (hooks methods in the prototype)
if (typeof obj === "function") {
obj = obj.prototype;
}
for (var prop in obj) {
if (typeof obj[prop] === "function") {
(function(origMethod) {
obj[prop] = function() {
var retVal, args;

// do your pre-work here

// make copy of args passed to this method
args = Array.prototype.slice.call(arguments, 0);

// call original method with proper args
retVal = origMethod.apply(this, args);

// do your post-work here

return retVal;
};
})(obj[prop]);
}
}
}

工作演示:http://jsfiddle.net/jfriend00/7LzQj/

<小时/>

您现在可以向该函数传递对象或构造函数。如果你向它传递一个对象,它将 Hook 该对象上现有的可枚举方法。如果你向它传递一个构造函数,它会将方法挂接到构造函数的原型(prototype)上。这允许您为整个构造函数创建的所有对象(提前)设置 Hook ,或者仅 Hook 单个对象。

<小时/>

如果您的对象动态添加方法(无论是在构造函数中还是在对象生命周期的后期),并且您希望 Hook 这些方法,那么您需要在这些方法之后在对象上调用 overideMethods()添加方法 - 您将无法仅在构造函数上调用它。

关于JavaScript 相当于 php 的 __call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20363571/

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