【有关JS中的继承(实现继承)问题】

继承:(主要依靠原型链进行实现)

1.原型链

其基本思想是:利用原型让一个引用类型的示例继承另一个引用类型的属性和方法
实现的本质是重写原型对象,并代之以一个新类型的实例
1.1 有关构造函数、原型和实例的关系:
每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,每个实例都包含一个指向原型对象的内部指针

1.2 引出原型链
我们让一个原型对象等于另一个类型的实例,这时原型对象将包含一个指向另一个类型的指针,而另一个原型中也包含着一个指向另一个构造函数的指针,层层递进,就形成了原型链
1.3 实现原型链的基本方式:

//创建一个名为SuperType的新类型
function SuperType() {
    
    
	//添加属性
  this.property = true;
}
//添加方法
 SuperType.prototype.getSuperValue = function () {
    
    
      return this.property;
  };
  //创建一个SubType的新类型
function SubType() {
    
    
    this.subproperty = false;
}
//注意:创建一个SuperType的实例,并把它赋值给SubType的原型
SubType.prototype = new SuperType();
//在SubType的原型中添加方法
SubType.prototype.getSubValue=function () {
    
    
    return this.subproperty;
};
//创建一个SubType的实例并赋值给instance
var instance = new SubType();

alert(instance.getSuperValue());//true

这段代码的最终结果就是:instance 指向 SubType的原型,SubType的原型又指向SuperType的原型。

2. 默认的原型:

做了一个粗略的图:
在这里插入图片描述

3. 确定原型和实例的关系:

alert(instance instanceof Object);//true
alert(instance instanceof SuperType);//true
alert(instance instanceof SubType);//true

或者:

alert(Object.prototype.isPrototypeOf(instance));//true
alert(SuperType.prototype.isPrototypeOf(instance));//true
alert(SubType.prototype.isPrototypeOf(instance));//true

猜你喜欢

转载自blog.csdn.net/qq_51368103/article/details/116669594