Это просто:
+-----------------+ tail
| |-----------------> [true]
| benji |
| |
+-----------------+
|
| __proto__
|
v
+-----------------+ constructor +-----------------+
| |------------------>| |
| Dog.prototype | | Dog |
| |<------------------| |
+-----------------+ prototype +-----------------+
|
| __proto__
|
v
+-----------------+ constructor +-----------------+
| |------------------>| |
| Object.prototype| | Object |
| |<------------------| |
+-----------------+ prototype +-----------------+
benji.constructor
является Dog
.
benji.constructor.prototype
является Dog.prototype
.
benji.constructor.prototype.constructor
является Dog
.
benji.constructor.prototype.constructor.prototype
является Dog.prototype
.
benji.constructor.prototype.constructor.prototype.constructor
является Dog
.
Это продолжается вечно. Вместо того, что вы хотите Object.getPrototypeOf
:
Object.getPrototypeOf(benji).constructor
является Dog
.
Object.getPrototypeOf(Object.getPrototypeOf(benji)).constructor
является Object
.
С Object.getPrototypeOf
итеративно вы можете создать специальную функцию для этого:
function getPrototypeOf(n, object) {
if (n === 0) return object;
else return getPrototypeOf(n - 1, Object.getPrototypeOf(object));
}
Теперь вы можете использовать его следующим образом:
getPrototypeOf(1, benji).constructor; // Dog
getPrototypeOf(2, benji).constructor; // Object
Это все люди.
'benji.constructor == Собака' только потому, что' Dog.prototype.constructor = Dog' – Bergi
tail - это конкретный экземпляр экземпляра и говорит, что это прототип (общий) член, больше о прототипе и функциях конструктора здесь: http://stackoverflow.com/a/16063711/1641941 – HMR