1.
prototype和__proto__,以及constructor
切记:
prototype是函数对象才会有的属性,__proto__是每一个对象都会有的属性。constructor是prototype对象中的一个属性。
原型prototype是什么?
原型是一个对象,也称prototype为原型对象。
原型对象存在的意义是什么?
答:共享方法,节省内存。
一般情况下,公共属性放在构造函数里面,公共的方法放在原型对象身上。
对象中__proto__
对象中__proto__的指向:
(1)字面量方式创建的对象:
(2)通过构造函数方式创建的对象,__proto__的指向是创建该对象的构造函数的原型对象。
constructor构造器
constructor是prototype对象中的一个属性(也是一个对象)。
任何函数都有prototype对象属性,该对象中的constructor属性指回该函数。
2.原型链
首先先看下面的代码
下面代码结果可以看出,Person函数并没有age属性以及run方法(实例成员),也没有sex属性(原型对象上的成员)。有test属性。
所以Person函数不能访问实例成员和原型对象上的成员,只能访问静态成员或者通过原型链找到的成员(通过Person函数的__proto__属性而不是Person函数的prototype属性)
<body>
<script>
function Person(age){
this.age=age
this.run=function(){
console.log('跑步')
}
}
//添加静态成员
Person