Есть только 3 строки кода, и все же у меня возникли проблемы с полным пониманием этого:
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
newObject = Object.create(oldObject);
-
Object.create()начинается с создания пустой функции с именемF. Я думаю, что функция является своего рода объектом. Где хранится этот объектF? По-моему, глобально. -
Далее наш
oldObject, переданный какo, становится прототипом функцииF. Функция (т.е. Объект)Fтеперь "наследует" от нашегоoldObject, в том смысле, что разрешение имени будет проходить через него. Хорошо, но мне любопытно, какой прототип по умолчанию для объекта Object? Это также верно для функции-объекта? -
Наконец,
Fсоздается и возвращается, становясь нашимnewObject. Строго ли здесь операцияnew? РазвеFне предоставляет то, что нам нужно, или существует критическое различие между объектами-функциями и не-функциональными объектами? Очевидно, что с помощью этой техники невозможно будет иметь конструкторскую функцию.
Что произойдет в следующий раз Object.create()? Переписывается ли глобальная функция F? Разумеется, он не используется повторно, потому что это изменит ранее настроенные объекты. И что произойдет, если несколько потоков вызовут Object.create(), есть ли какая-либо синхронизация, чтобы предотвратить условия гонки на F?