Резюме ошибки

Прежде чем меня кричат ​​за такую ​​безрассудную попытку, позвольте мне сказать вам, что я бы не стал этого делать в реальной жизни, и это академический вопрос .

Предположим, я пишу библиотеку и хочу, чтобы мой объект мог составлять методы по мере необходимости.

Например, если вы хотите вызвать метод .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]; });

] Это не то, что я ищу

6
задан qwertymk 1 February 2012 в 19:38
поделиться