1、原型
1) 原型,即每一个构造函数都有一个prototype属性,指向另一个对象,也称原型对象
2) 这个对象可以挂载函数,对象实例化不会多次创建原型上函数,节约内存
3) 我们可以把那些不变的方法,直接定义在prototype对象上,这样所有对象的实例就可以共享这些方法
4) 构造函数和原型对象中的this都指向实例化对象
constructor属性
该属性指向该原型对象的构造函数
每个原型对象里面都有个constructor属性(构造函数)
如果有多个对象方法,可以给原型对象采取形式赋值,但也会覆盖构造函数原型对象原来的内容,使原型对象constructor就不再指向当前构造函数了,此时可以添加一个constructor指向原来的构造函数
function Star(){
}
Star.prototype = {
//利用constructor,指回 Star构造函数
constructor: Star,
Sing: function () { console.log('唱歌')},
dance: function () { console.log('跳舞')},
}
console.log(Star.prototype.constructor)
对象原型
__proto__是JS非标准属性
浏览器里面显示[[prototype]]和__proto__意义相同
对象都会有一个属性__proto__指向构造函数的prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有__proto__原型的存在
__proto__对象原型里面也有一个constructor属性,指向创建该实例对象的构造函数
原型链-查找规则
只要有对象就有__proto__指向原型对象只要是原型对象就有constructor指向创造我的构造函数
①当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性。
② 如果没有就查找它的原型(也就是 proto指向的 prototype 原型对象)
③ 如果还没有就查找上一层的原型对象依此类推一直找到 Object为止 (null)
④_proto 对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线