люди играют вокруг с функциями javascript, и это приводит к интересным шаблонам дизайна. Jquery использует многие из этих шаблонов и создает приятную оболочку вокруг многих функций. так что jquery в конечном счете похож на статический класс, в котором можно делать действительно аккуратные stuff ..
, как и все классы, у него есть имя, а по умолчанию - jQuery. $ - ничто не покупает идентификатор, который привязан к библиотеке jQuery и не позволяет вам вводить «jQuery» в качестве идентификатора.
Тот факт, что он является символом $, является произвольным. В какой-то момент было принято решение использовать символ $, но факт заключается в том, что он мог быть почти любым допустимым идентификатором ECMAScript.
Основная причина, по которой мы используем $ в качестве идентификатора, заключается в том, что вы вряд ли допустите простые ошибки опечатки при вводе одного символа вместо строки.
Надеюсь, что все ясно. Пожалуйста, исправьте меня, ребята, если у меня что-то не так
A простой пример, например, что моя собственная библиотека скажет класс калькулятора
var Calculator= (function()
{
function add(a,b)
{
return a+b;
}
function subtract(a,b)
{
return a-b;
}
function multiply()
{
return a*b;
}
function log()
{
console.log("log 123")
}
return
{
add: add,
subtract: subtract,
multiply: multiply
}
}());
Теперь я могу выполнить операцию с использованием класса Calculator следующим образом:
Calculator.multiply(Calculator.add(2,3),5);
добавить, что мои локальные функции частные и не подвергаются воздействию снаружи. В этом случае моя функция журнала не может быть доступна с помощью Calculator.log, он скажет, что метод не найден на объекте.
Теперь, возвращаясь к вашему вопросу, вы можете сделать что-то вроде этого:
var _ = Calculator;
и теперь используют функции calc, такие как
_.multiply(_.add(2,3),5);
. Интересно, что библиотека также называется underscore ..
Необходимо убедиться, что выражения переменных в лямбда-выражении ссылаются на один и тот же экземпляр.
Этот код работает очень хорошо и, похоже, дает ожидаемый результат.
void Main()
{
var var = Expression.Variable(typeof(Foo), "foo");
var expr = Expression.Lambda(
Expression.Lambda(
Expression.Call(var, typeof(Foo).GetMethod("Bar"))), new[] { var });
var res = (Action)expr.Compile().DynamicInvoke(new Foo());
res();
}
class Foo
{
public void Bar()
{
Console.WriteLine("Bar");
}
}