javascript - 在原型链中this指向和查询步骤的问题
伊谢尔伦
伊谢尔伦 2017-04-11 12:37:45
0
1
680

在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的实例之中查找到了。 从近至远有两次。

自己的理解不知道正确与否,望各位大神能够解一下疑惑。

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

reply all(1)
巴扎黑

你这是在干嘛...第一问图文无关?第二问,为什么会有SubType...你最后new的是SuperType...,alert(instance.getSuperVlaue());这一句是去原型链中拿到的,而它返回的就是实例的属性value的值...你讲的一大堆没看明白.

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!