Оригинальный код:Object.prototype Методы и 'Строгая' в IIFE (Сразу-Вызванный Функция Expression)
'use strict';
function GitJs(config) {
var defaults = {
inheriting: false,
clientId: undefined,
accessToken: undefined,
baseUrl: 'https://api.github.com',
mode: 'read'
};
this.config = $.extend(defaults, config);
}
/**
* Gets the jQuery method that GitJs#generateApiRequest is going to use to send the ajax request.
*
* @param {string} httpVerb The HTTP verb that the request will use,
* @return string
*/
GitJs.prototype.getCommandMethod = function (httpVerb) {
var method = $.get;
switch (httpVerb) {
case 'GET':
method = $.get;
break;
case 'POST':
method = $.post;
break;
}
return method;
};
...
Новый код:
(function() {
'use strict';
'use strict';
function GitJs(config) {
var defaults = {
inheriting: false,
clientId: undefined,
accessToken: undefined,
baseUrl: 'https://api.github.com',
mode: 'read'
};
this.config = $.extend(defaults, config);
}
/**
* Gets the jQuery method that GitJs#generateApiRequest is going to use to send the ajax request.
*
* @param {string} httpVerb The HTTP verb that the request will use,
* @return string
*/
GitJs.prototype.getCommandMethod = function (httpVerb) {
var method = $.get;
switch (httpVerb) {
case 'GET':
method = $.get;
break;
case 'POST':
method = $.post;
break;
}
return method;
};
...
}());
Как этот код стоит, когда Я пытаюсь:
var gitjs = new GitJs();
Я сказал, что GitJs не определено
Какого черта я думал:
- Я не хочу, чтобы положить
use strict
внутри каждого метода. - Я хочу, чтобы мой код играл хорошо, если он получает миниатюру и объединяется в другой файл.
- Я хочу использовать синтаксис
.prototype
для простоты наследования позже (и код ясности) - Я не хочу, чтобы сделать глобальную переменную
var gitJs
, поскольку это может быть преодолено чужим сценарием. - Я предполагаю, что пользователь всегда будет вызывать конструктор объекта с помощью ключевого слова
new
Для записи, я знаю, что я не прав. Неправильно. Я просто не могу понять, где этот недостаток в моих мыслях лежит, и мне хотелось бы получить какое-то руководство.
Я начинаю понимать, что я сделал не так. Что касается глобального var GitJs, как насчет моего оператора 'new'? Или это спорный вопрос, так как конструктор должен получать вызывается IIFE так или иначе? –
Конструктор не будет вызывать IIFE; IIFE является фактически просто оболочкой области для кода, который выполняется процедурно (то есть, сразу). Ваш новый оператор должен работать, если у вас есть GitJS в вашей локальной области, что вы можете сделать, установив глобальный или с помощью загрузчика модуля. – zetlen