一、原型模式
funtion Person(){}
Person.prototype.name = '小红';
Person.prototype.age = 29;
Person.prototype.job = 'software Engineer';
Person.prototype.sayName = function(){
alert(this.name);
}
var person1 = new Persion();
person1.sayName();//'小红'
var person2 = new Persion();
person2.sayName();//'小红'
alert(person1.sayName == person2.sayName)//'true'
1、每创建的一个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途包含可以由特定类型的所有实例共享的属性和方法。
使用对象原型的好处是:可以让所有对象实例共享它包含的属性和方法。
二、理解原型对象
1、创建一个新函数,就会根据一组特定的规则为改函数创建一个prototype属性,这个属性指向函数的原型对象,所有原型对象都会自动获得一个constructor属性,这个属性是一个指向prototype属性所在函数的指针
编辑切换为居中
图1-1
图1-1展示了Person构造函数、Person的原型属性和Person现有的两个实例之间的关系。
2、对象属性的查询过程
通过上面的代码片段我们可以看出,person1、person2两个实例不包含属性和方法,但我们却可以调用person1、person2的sayName(),这是通过查找对象的属性过程实现的。
对于过程的解读
(1)当代码读取某个对象的某个属性的时,都会执行一次搜索,目标是具有给定名字的属性
(2)搜索首先从对象实例本身开始,若在对象属性中找到了给定名字的属性,则返回属性的值,若果没有找到,则继续搜索指针指向的原型对象
(3)若在原型对象中查到了给定名字的属性,则返回该属性的值
对于person1、person2的sayName()针对于sayName属性值的查询过程是相同的,这正是多个对象实例共享原型所保存的属性和方法的基本原理。