Раньше я был немного смущен прототипом наследования и поиска идентификаторов в цепочке прототипа JavaScript.
Например, следующий код:
Кода -копия выглядит следующим образом:
функция foo () {};
var foo = new foo ();
Foo.prototype.label = "laruence";
оповещение (foo.label); // Вывод: Ларюн
Alert (foo.label); // Выход: не определен
Сегодня я увидел следующую картинку:
Макет объекта JavaScript
Также см. В иерархии объекта JavaScript:
Прототип используется только для свойств, унаследованных объектами/экземплярами, создаваемыми этой функцией. Сама функция не использует связанный прототип.
Другими словами, прототип объекта функции не функционирует в процессе поиска цепочки прототипа.
Сегодня я обнаружил, что в Firefox (поскольку Firefox обнажил [[[прототип]] через __proto__), тот, кто действительно участвует в поиске идентификатора, - это __proto__ функционального объекта,
Кода -копия выглядит следующим образом:
функция foo () {};
var foo = new foo ();
Foo .__ Proto __. Label = "laruence";
оповещение (foo.label); // Вывод: Ларюн
Alert (foo.label); // Выход: не определен
И, очевидно:
Кода -копия выглядит следующим образом:
функция foo () {};
Alert (foo .__ Proto__ === foo.prototype); // Вывод: ложь
Кроме того, это также объяснил,
Кода -копия выглядит следующим образом:
Alert (Object.Foreach); // неопределенный
Function.prototype.foreach = function (объект, блок, контекст) {
for (var key in object) {
if (typeof this.prototype [key] == "undefined") {
block.call (context, Object [Key], Key, Object);
}
}
};
Alert (Object.Foreach);
Alert (function.foreach);
Alert (object.foreach === function.foreach); // истинный