home

article

关于__proto__的链式记忆

function Foo() {};

关于proto的链式记忆

实例化解析:

function Foo() ;

var foo = new Foo(); foo.proto === Foo.prototype; foo.proto.proto === Object.prototype; foo.proto.proto.proto === null; foo.prototype === undefined; foo.toString === Object.prototype.toString;

原形继承后的实例化解析:

function Bar() ;

Bar.prototype.proto = Foo.prototype;

var bar = new Bar(); bar.proto === Bar.prototype; bar.proto.proto === Foo.prototype; bar.proto.proto.proto === Object.prototype; bar.proto.proto.proto.proto === null; bar.prototype === undefined; bar.toString === Object.prototype.toString

对象bar,访问toString,整个链式过程如下:

bar.toString || bar.proto.toString || bar.proto.proto.toString || bar.proto.proto.proto.toString

bar.toString === Object.prototype.toString

最终调用的是 Object.prototype.toString

奇怪的Foo.toString

Foo.proto === Function.prototype; Foo.proto.proto === Object.prototype; Foo.prototype.proto === Object.prototype; // 神奇竟然不等于 Object.prototype.toString Foo.toString === Object.toString; Foo.prototype.toString === Object.prototype.toString;

每个function生成的时候都直接被设置了toString 等于 Object.toString了。

参考文档

有爱

希望本文对你有用 ^_^

Thank you for reading, and have a great day!

Comments