Я смотрел Pluralsight видео с Дугласом Crockford: http://pluralsight.com/training/Courses/TableOfContents/javascript-good-partsБинарная функция эквивалентности - demethodize
В этом видео он проходит через ряд интересных упражнений, чтобы продемонстрировать некоторые JavaScript принципалов. Когда он попадает в функции «demethodize» вы в основном имеют следующий код:
function add(x,y){
return x + y;
}
//add(1,2) => 3
function methodize(fn){
return function(x){
return fn(this, x);
};
};
Number.prototype.Add = methodize(add);
//(1).Add(2) => 3
function demethodize (fn){
return function(x,y){
return fn.call(x,y);
};
}
var newAdd = demethodize(Number.prototype.Add);
// newAdd(1,2) => 3
Заметьте, что эта функция «demethodize» является только для бинарных функций.
Мой вопрос заключается в том, что, по моему пониманию, следующее должно привести к эквивалентным «demethodise» функций:
function demethodize (fn){
return fn.call;
}
или
var demethodize = Number.prototype.Add.call;
Но эти функции не работают (с учетом то же требование бинарной функции)! Почему это?
Пожалуйста, помогите мне заполнить пробел в моем понимании. Я думал, что если бы у меня была двоичная функция, реализация которой содержала другой вызов двоичной функции с теми же аргументами, которые передавались внутренней функции, то использование внутреннего вызова функции было бы эквивалентным.