Зачем использовать обертку функции javascript (добавляется в coffeescript) ".call(this)"
Когда я использую последний (1.0) выпуск кофе script, простой выход javascript выглядит так (по умолчанию):
(function() {
var a;
a = 1;
}).call(this);
Что делает .call(this) и что может быть причиной его добавления?
Ответ 1
Он создает функцию, а затем вызывает себя с пространством родительских функций/объектов.
.call и .apply - разные методы вызова функции. В основном вы создали функцию, которая ничего не делает, кроме набора a = 1 в пределах своей области.
В javascript вам нужно понять, что каждая функция является объектом, а this - это то, что относится к текущему объекту/функции. Использование .call(this) переопределяет this изнутри функции и заменяет его на один из вызывающего контекста.
Ответ 2
Это способ убедиться, что скомпилированный CoffeeScript имеет собственную область имен переменных. Это имеет преимущества с точки зрения эффективности и простоты (вы знаете, что сгенерированный JavaScript не будет топать на переменные, используемые другим кодом). Вы можете отключить его с помощью параметра --bare (или -b) компилятору CoffeeScript.
Причина call(this) заключается в том, чтобы убедиться, что CoffeeScript имеет тот же this, что и область, в которой он размещен, потому что функции обычно не наследуют свой объект this из окружающего контекста.