Js中,对象分两种,普通对象object和函数对象function,每创建一个函数,该函数都会自动带有一个prototype属性。该属性是一个指针,指向一个对象,该对象称之为原型对象,原型对象是定义了一些公用的属性和方法,利用原型创建出来的新对象实例会共享原型的所有属性和方法,下面通过一个小demo来演示它们之间的关系
<script>
// 创建原型
var People = function (name) {
this.name = name;
};
// 原型的方法
People.prototype.sayHello = function () {
console.log(this.name + ",hello");
};
// 实例化创建新的原型对象,新的原型对象会共享原型的属性和方法
var People1 = new People("zhangsan");
var People2 = new People("lisi");
People1.sayHello(); // zhangsan,hello
People2.sayHello(); // lisi,hello
// 为新对象实例添加方法
// 通过原型创建的新对象实例是相互独立的
People1.getName = function () {
console.log(this.name);
}
// zhangsan
People1.getName();
// Uncaught TypeError: person2.getName is not a function
People2.getName();
</script>
所有引用类型都有一个__proto__(隐式原型)属性,属性值是一个普通的对象;所有引用类型的__proto__属性指向它构造函数的prototype