javascript 继承&原型链

原型对象 prototype

每个函数都有一个 prototype 属性,这个属性是一个指针,指向函数的原型对象。

原型对象有一个属性 constructor ,这个属性包含一个指向 prototype 属性所在的函数(构造函数)的指针

当调用构造函数创建一个实例,这个实例内部将包含一个指针,指向构造函数的原型对象。

在这里插入图片描述
当为对象实例添加一个属性时,这个属性就会屏蔽原型对象中保存的同名属性,但不会修改那个属性。即使将这个属性设置为 null,也只会在实例中设置这个属性,而不会恢复其指向原型的连接。不过,使用 delete 操作符则可以完全删除实例属性,从而让我们能够重新访问原型中的属性

使用 hasOwnProperty()方法可以检测一个属性是存在于实例中,还是存在于原型中。

in 操作符:会在通过对象能过访问到给定属性时返回 true ,无论这个属性是在实例中还是原型中。

同时使用 hasOwnProperty()方法和 in 操作符,就可以确定该属性到底是存在于对象中,还是存在于原型中。

原型链

原型链是实现继承的主要方法。其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。

概念:

每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,实例都包含一个指向原型对象的指针。假如原型对象是另一个构造函数的实例,那么原型对象也包含一个指向另一个原型的指针,如此层层递进,就叫原型链。

所有引用类型都默认继承自 object ,object 的原型为null。

扫描二维码关注公众号,回复: 3913798 查看本文章

确定原型与实例之间的关系:instanceof isPrototypeOf

原型链的问题:在创建子类型的实例时,不能向超类型的构造函数中传递参数。实际上, 应该说是没有办法在不影响所有对象实例的情况下,给超类型的构造函数传递参数。

借用构造函数

等待…


猜你喜欢

转载自blog.csdn.net/weixin_42186513/article/details/83418008