Как сделать функцию привязки в JavaScript?
Позволяет себе такую функцию:
function foo(x) {
x += '+';
return x;
}
Использование его будет выглядеть так:
var x, y;
x = 'Notepad';
y = foo(x);
console.log(y); // Prints 'Notepad+'.
Я ищу способ создания функции, связываемой с другими функциями.
Представьте себе использование:
var x, y;
x = 'Notepad';
y = x.foo().foo().toUpperCase(); // Prints 'NOTEPAD++'.
console.log(y);
Как мне это сделать?
Ответы
Ответ 1
Конечно, трюк заключается в том, чтобы вернуть объект после его изменения:
String.prototype.foo = function() {
return this + "+";
}
var str = "Notepad";
console.log(str.foo().foo().toUpperCase());
http://jsfiddle.net/Xeon06/vyFek/
Чтобы сделать метод доступным в String
, я изменяю его прототип. Будьте осторожны, чтобы не делать этого на Object
, хотя это может вызвать проблемы при перечислении их свойств.
Ответ 2
Если я правильно помню, вы можете использовать "this" как контекст функции (объект, к которой она принадлежит), и вернуть ее, чтобы сделать функцию цельной. Другими словами:
var obj =
{
f1: function() { ...do something...; return this;},
f2: function() { ...do something...; return this;}
}
тогда вы можете связать вызовы как obj.f1().f2()
Имейте в виду, что вы не сможете достичь ожидаемого, вызвав obj.f1(). toUpperCase() - он выполнит f1(), вернет "this" и попытается вызвать obj.toUpperCase().