JavaScript构造函数方法与prototype原型方法的优先级
- JavaScript 中,每个构造函数都有一个 prototype 属性,指向原型对象
- 这个对象可以挂载函数,对象实例化不会多次创建原型上函数,节约内存
- 我们可以把那些不变的方法,直接定义在 prototype 对象上,这样所有对象的实例就可以共享这些方法。
- 构造函数和原型对象中的this 都指向 实例化的对象
构造函数 Student
中未定义任何方法,这时实例对象调用了原型对象中的方法 showName
,接下来改动一下代码:
<script>
function Student() {
// 此处定义同名方法 showName
this.showName= () => console.log('小明')
}
// 为构造函数的原型对象添加方法
Student.prototype.showName= () => console.log('小胡')
const student= new Student();
student.showName(); // 输出结果为 小明!
</script>
构造函数 Student
中定义与原型对象中相同名称的方法,这时实例对象调用则是构造函中的方法 showName
。
通过以上两个简单示例不难发现 JavaScript 中对象的工作机制:当访问对象的属性或方法时,先在当前实例对象是查找,然后再去原型对象查找,并且原型对象被所有实例共享。