1. Метод перегрузки
$('#element').attr('alt', 'Ivan is SUPER hungry! lolz');
против
$('#element').attr({'alt': 'Ivan is an ugly monster! omfgz'});
var attr = function (key, value) {
// is first argument an object / map ?
if (typeof key === "object") {
// for each key value pair
for (var k in key) {
// recursively call it.
attr(k, key[k]);
}
} else {
// do magic with key and value
}
}
2. Затворы
(function(window, undefined) { /* jQuery */ })(window);
Не используется как обработчик onload
. Это просто создание новой области видимости внутри функции.
Это означает, что var foo
является локальной переменной, а не глобальной. Он также создает действительную переменную undefined
для использования, поскольку параметры, которые не указаны, передаются в undefined
Это gaurds againts window.undefined = true
, что допустимо / разрешено.
бит (окно) там в конце. Что именно здесь происходит с оконным объектом?
Это микрооптимизирующий доступ к окну, делая его локальным. Доступ к локальным переменным примерно на 0,01% быстрее, чем к глобальным переменным
Я ошибаюсь в оценке, что объекты ничем не отличаются от функций в Javascript?
Да и нет. Все функции являются объектами. $()
просто возвращает новый объект jQuery, потому что внутри он вызывает return new jQuery.fn.init();
3. Ваш фрагмент
function $(var element = null) {
Javascript не поддерживает значения параметров по умолчанию или необязательные параметры. Стандартная практика для подражания заключается в следующем
function f(o) {
o != null || (o = "default");
}
Сравнивая Javascript с PHP, вы используете точку. так же, как вы использовали бы -> для извлечения метода из объекта?
Вы можете получить доступ к свойствам объекта, используя foo.property
или foo["property"]
, свойство может быть любого типа, включая функции / методы.
4. Разные вопросы, спрятанные в вашем вопросе
Может ли кто-нибудь дать мне краткое объяснение, что такое на самом деле карта и как она отличается от массива в Javascript?
Массив создается с использованием var a = []
, он просто содержит список пар ключ-значение, где все ключи являются положительными числами. Он также имеет все Array methods
. Массивы также являются объектами.
Карта - это просто объект. Объект - это просто пакет пар ключ-значение. Вы назначаете некоторые данные под ключ на объекте. Эти данные могут быть любого типа.