JavaScript 原型 prototype
构造函数原型 prototype
-
构造函数通过原型分配的函数是所有对象所共享的
-
JavaScript 规定 每个构造函数都有一个 prototype 属性 指向另一个对象。注意这个 prototype 就是一个对象,这个对象的所有属性和方法都会被构造函数所拥有。
-
我们可以把那些不变的方法 直接定义在 prototype 对象上 这样所有对象的实例就可以共享这些方法。
-
原型就是一个对象,我们也称为 prototype 为对象
-
原型的作用就是共享方法。
对象原型 __proto__
-
对象都会有一个属性
__proto__
指向构造函数的 prototype 原型对象,之所以我们对象可以使用构造函数 prototype 原型对象的属性和方法,就是因为对象有__proto__
原型的存在。 -
__proto__
对象原型和原型对象 prototype 是等价的 -
__proto__
对象原型的意义就在于为对象的查找机制提供一个方向,或者说一条路线,但是他是一个非标准,因此在实际开发中,不可以使用这个属性,他只是内部向原型对象 prototype。 -
__proto__
对象原型 -
prototype 原型对象
constructor 构造函数
-
对象原型(
__proto__
)和构造函数( prototype )原型对象里面都有一个属性constructor
属性,constructor
我们称为构造函数,因为他指向会构造函数本身。 -
constructor
主要用于记录该对象引用那个构造函数,它可以让原型对象重新指向原来的构造函数
成员的查找机制
-
当访问一个对象的属性( 包括方法 )时,首先查找这个对象自身有没有该属性。
-
如果没有就查找它的原型(也就是
__proto__
指向的 prototype 原型对象)。 -
如果还没有就查找原型对象的原型( Object 的原型对象 )。
-
以此类推一直找到 Object 为止( null )
-
__proto__
对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线
扩展内置对象
可以通过原型对象,对原来的内置对象进行扩展自定义的方法,比如给对象增加自定义求偶数和的功能。
注意:数组和字符内置对象不能给原型对象覆盖操作 Array.prototype = {}
, 只能是 Array.prototype.xxx = function(){}
的方法。
如果该文章能帮到你的话 麻烦点个赞 谢谢啦~