Прежде чем меня кричат за такую безрассудную попытку, позвольте мне сказать вам, что я бы не стал этого делать в реальной жизни, и это академический вопрос .
Предположим, я пишу библиотеку и хочу, чтобы мой объект мог составлять методы по мере необходимости.
Например, если вы хотите вызвать метод .slice ()
, а у меня его не было, то обработчик window.onerror
запустил бы его для меня
Как бы то ни было, я поигрался с этим здесь
window.onerror = function(e) {
var method = /'(.*)'$/.exec(e)[1];
console.log(method); // slice
return Array.prototype[method].call(this, arguments); // not even almost gonna work
};
var myLib = function(a, b, c) {
if (this == window) return new myLib(a, b, c);
this[1] = a; this[2] = b; this[3] = c;
return this;
};
var obj = myLib(1,2,3);
console.log(obj.slice(1));
Также (может быть, мне стоит задать новый вопрос), могу ли я изменить свой конструктор, чтобы он принимал неопределенное количество аргументов?
var myLib = function(a, b, c) {
if (this == window) return new myLib.apply(/* what goes here? */, arguments);
this[1] = a; this[2] = b; this[3] = c;
return this;
};
Кстати, я знаю, что могу загрузить свои объекты с помощью
['slice', 'push', '...'].forEach(function() { myLib.prototype[this] = [][this]; });
] Это не то, что я ищу