我们所创建的每一个函数(方法),解析器都会向函数中添加一个属性prototype。这个属性对应着一个对象,这个对象就是我们所谓的原型对象。
(1)如果函数作为普通函数调用prototype没有任何作用
(2)如果函数作为构造函数调用prototype,可以创建对象的__proto__属性来访问构造函数的prototype属性。
<script type="text/javascript">
//创建一个函数
function Student(name){
//每创建一个函数就会有一个默认的属性prototype:原型对象,
this.name = name;
}
Student();// 普通函数调用
var stu1 = new Student(); //创建对象调用构造函数
console.log(stu1.__proto__ == Student.prototype); //结果:true
/*
结果为true。这也就意味着我们所创建的对象的__proto__属性来访问构造函数的protype属性。
*/
//Student.prototype相等于原型对象,向原型对象添加属性
Student.prototype.a = 123;
console.log(stu1.__proto__.a); //结果:123
//原型对象是一个公共区域,创建多个实例都可以访问,__proto__可以省略不写。
var stu2 = new Student();
console.log(stu1.a+"---"+stu2.__proto__.a); //结果:123---123
</script>
图解