js原型链原理
最初,ECMAscript的发明者设计了这个链表,以便在保持继承属性的同时简化语言。你学过数据结构中的链表吗?链表中有一个位置相当于指针,指向下一个结构。所以__proto__是一样的。无论何时定义原型,都相当于将实例的__proto__指向一个结构。然后,指向的结构被称为实例的原型。文字有点费解,复制代码如下:varfoo={x:10,y :20 };
当我没有指定__proto__时,foo也会保留这样的属性。如果有明确的点,那么链表就会被链接。很明显,下图中,B和C共享了A的属性和方法,同时又有自己的私有属性。__proto__默认值也指向。它引用最高级别的object.prototype,object.prototype的_ _ prototype _ _为空。复制的代码如下:VAR A={x: 10,计算:函数(z){返回这个。xThis.y z } }var b={ y: 20,_ _ proto _ _ : a };var c={ y: 30,_ _ proto _ _ : a };//调用继承的方法b . calculate(30);//60
了解属性链接指针__proto__的性质。理解构造函数。定义原型时,将构造一个原型对象,这个原型对象将存储在构造这个原型的功能的原型方法中。复制代码如下:函数Foo(y){ this . y=y;} foo . prototype . x=10;foo . prototype . calculate=function(z){ return this . x this . y z;};var b=new Foo(20);alert(b . calculate(30));
[参考文件]http://dmitrysoshnikov.com/ecmascript/javascript-the-core/