Учитывая следующий код:Как я могу увидеть цепочку прототипов объекта Javascript?
function a() {}
function b() {}
b.prototype = new a();
var b1 = new b();
Мы можем остаться, что a
добавлен b
«s цепи прототипов. Отлично. И все следующие условия:
b1 instanceof b
b1 instanceof a
b1 instanceof Object
Мой вопрос, что если мы не знаем о происхождении b1
раньше времени? Как мы можем обнаружить членов своей прототипной цепи? В идеале мне нужен массив вроде [b, a, Object]
или ["b", "a", "Object"]
.
Возможно ли это? По-моему, я видел ответ где-то на SO, который описывал, как это узнать, но я не могу, чтобы жизнь меня снова находила.
'constructor' дает вам функцию-конструктор ближайшего прототипа-предка, который не был унаследован от другого прототипа-конструктора. Это почти никогда не то, что вы хотите. Например, в коде вопроса 'b1.constructor' является' a', а не 'b', и если вы вывели объект' c' из 'b',' c1.constructor' все равно будет 'a'. Обычное эмпирическое правило: не используйте конструктор для чего-либо когда-либо. [eta: lol @ 'scared and lonely' ... да, это одна из тех частей JavaScript, которая предназначена для того, чтобы сбивать с толку вас, делая что-то полезное, но на самом деле это ловушка.] – bobince
Да, я рассмотрите оригинальный вопрос в интересном упражнении, но я никогда не добавлял код, который, как я ожидал, действительно работал. Здесь очень хорошее объяснение: http://mckoss.com/jscript/object.htm – Pointy