-
Notifications
You must be signed in to change notification settings - Fork 327
/
hitch.js
29 lines (24 loc) · 899 Bytes
/
hitch.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const EXPORTED_SYMBOLS = ['hitch'];
function hitch(obj, method) {
if (obj && method && ('string' == typeof method)) {
if (!obj[method]) {
throw "method '" + method + "' does not exist on object '" + obj + "'";
}
method = obj[method];
} else if ('function' == typeof method) {
obj = obj || {};
} else {
throw "Invalid arguments to GM_util.hitch().";
}
var staticArgs = Array.prototype.splice.call(arguments, 2, arguments.length);
return function() {
// make a copy of staticArgs (don't modify it because it gets reused for
// every invocation).
var args = Array.prototype.slice.call(staticArgs);
// add all the new arguments
Array.prototype.push.apply(args, arguments);
// invoke the original function with the correct this obj and the combined
// list of static and dynamic arguments.
return method.apply(obj, args);
};
}