在JS原型链之中有一些流程和原理不太明白,不知道我的理解是否正确?
function PersonFater() {
this.a = 66; //这里的this指向new出来的父实例
}//假设他为父函数
function PersonChildren() {
}//假设他为子函数
PersonChildren.prototype = new PersonFater(); //创建一个实例对象,构造函数的原型属性指针指向这个新生成的实例。
var person = new PersonChildren();
var person2 = new PersonChildren();
//创建子函数的实例对象并把原型对象指向上面新生成的父实例对象
// alert(person.prototype.a); //直接报错,因为prototype自身是个属性,里面包含指针,属性无法包含属性。
var copy = person.__proto__;
var copy2 = person2.__proto__;
alert(copy.a);//66
copy2.a = 55;//对原型指向的实例对象进行属性更改
alert(copy.a);//55 两个子实例的原型属性指向同一个父实例对象,这就是原型的动态性。
问题1 除了person.__proto__以外还有什么方法能够获取原型指针所指向的实例对象
第二个问题来自于JS高程的范例
function SuperType() {
this.value = true;
}
SuperType.prototype.getSuperVlaue = function () {
return this.value;
}
function SubType() {
this.subVlaue = false;
}
SubType.prototype = new SuperType();
var instance = new SuperType();
alert(instance.getSuperVlaue());
问题2 这里是否触发了两次原型链查询 即首先通过 sub实例 > sub原型也就是super实例 > super原型 查找到了这个方法 然后查询this.value 但在instance的内部之中没有这属性 所以再次通过原型链 依次向上查找 最终在Super的实例之中查找到了。 从近至远有两次。
自己的理解不知道正确与否,望各位大神能够解一下疑惑。
你这是在干嘛...第一问图文无关?第二问,为什么会有SubType...你最后new的是SuperType...,alert(instance.getSuperVlaue());这一句是去原型链中拿到的,而它返回的就是实例的属性value的值...你讲的一大堆没看明白.