Есть только 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
?