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了。
参考文档
有爱
希望本文对你有用 ^_^
Comments