Этот код выполняет три вещи:
- Использование литерального синтаксиса объекта для создания экземпляров объекта
- Использование выражений анонимной функции длясоздавать функции и связывать их со свойствами объектов.(Функции являются первоклассными объектами в JavaScript, поэтому вы можете хранить ссылки на них, передавать ссылки и т. Д.)
- В частности, это переопределяет две стандартные функции, которые все объекты JavaScript наследуют от прототипа
Object
.
Давайте разберем его немного.
1) Обозначение литерала объекта:
var obj = {propName: propValue};
{
и }
в этом случае обозначают литерал объекта .Внутри литерала объекта вы можете написать propName: propValue
, чтобы присвоить propValue
свойству с именем propName
для объекта.Это так же, как:
var obj = {}; // Get an empty object
obj.propName = propValue; // Add a property to it
Вы можете сделать несколько свойств, разделенных запятыми.Так, например:
var obj = {
author: "Douglas Adams",
title: "The Hitchhiker's Guide to the Galaxy",
answer: 42
};
Это создает объект с тремя свойствами, два со строковыми значениями и одно с числовым значением.
Обратите внимание, что правая часть обрабатывается так же, какприсваивание и т. д. может быть любым, что может появиться в правой части оператора присваивания:
var x = "bar";
var obj = {
three: 1 + 2,
fubar: "foo " + x
};
Имена свойств можно заключать в кавычки, если вам нравится:
var x = "bar";
var obj = {
"three": 1 + 2,
"fubar": "foo " + x
};
... который удобен для указания свойств, которые имеют имена зарезервированных токенов (например, "if" или "return") или ранее зарезервированных токенов (например, "class"), где будет синтаксическая ошибка, если они не былиt в кавычках.
2) Теперь давайте посмотрим на выражения функций:
var f = function() { /* your code here */ };
Это выражение функции.Он создает новую функцию и присваивает ссылку на нее переменной f
.Вы можете вызвать его, позвонив по номеру f()
.
var f = function(name) {
alert("Hi " + name);
};
f("Fred"); // alerts "Hi Fred"
1 + 2) Итак, соединяя его с буквенной нотацией объекта:
var obj = {
foo: function(name) {
alert("Hi " + name);
}
};
obj.foo("Fred"); // alerts "Hi Fred"
(мне не нравятся анонимные функции, Я предпочитаю, чтобы у моих функций были имена , но это уже другая тема.)
3) И наконец: как указали maerics, конкретные функции, которые используются в этом коде, являются toString
и toLocaleString
, оба из которых являются стандартными функциями объектов JavaScript.Это означает, что они будут переопределять стандартную версию и возвращать заданные значения всякий раз, когда будет вызвана стандартная функция.