原型对象和继承

本文力求用最短的语言总结这块地知识点

好的!开始!

(1) 原型对象

先看一段代码:

function Peroson(){
    
}

Person.prototype.name = 'Jack';

var person1 = new Person();
person1.name

var person2 = new Person();
person2.name

Person函数创建之后,默认会有 prototype 属性,这个属性指向函数的原型对象,即:Person.prototype

默认情况下,所有原型对象都会有一个 constructor (构造函数)属性,指向 prototype 属性所在函数的指针
即:Person.prototype.constructor ==> Person

原型对象中除了 constructor 属性,其他的方法,是从 Object 继承而来

当创建了一个新实例后,该实例内部将会有一个 proto 属性,仅仅指向构造函数的原型对象。即 Person.prototype

需要明确一点的是:实例的 proto 连接,存在于实例与构造函数的原型对象之间,而不是存在于实例与构造函数之间

确定实例是否是该函数的实例:

Perosn.prototype.isPrototypeOf(person1)

如果实例中属性和原型中属性同名,则实例中属性会屏蔽原型中属性,但是不会重写。

(2) 继承

原理:利用原型让一个引用类型继承另一个引用类型的属性和方法
具体做法:让原型对象等于需要继承的构造函数的一个实例

示例:

function SuperType(){
    this.property = true;
}

SuperType.prototype.getSuperValue = function(){
    return this.property;
}

function SubType(){
    this.subproperty = false;
}

// 继承了 SuperType
SubType.prototype = new SuperType();

SubType.prototype.getSubValue = function(){
    return this.subproperty;
}

var instance = new SubType();

instance.getSuperValue()   // true

实现的本质是:重写原型对象,代之以一个新类型的实例

通过实现原型链,本质上扩展了原型搜索机制

确定原型和实例之间的关系

(1) instance instanceof Object

(2) SubType.prototype.isPrototypeOf(instance)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。