原型是什么?
JavaScript对象可以从其他对象那里继承属性和行为,更具体的来说,JavaScript使用原型式继承,其中被继承的对象成为原型。我们举个例子来说
比如我们创建一个小狗的原型,它有属性分别是name和weight,它有方法是bark
function Dog(name,weight){
this.name = name;
this.weight = weight;
}
Dog.prototype.bark = function(){
alert('wang wang !')
}
上面我们就创建好了小狗原型。你可能会发现,这里使用了prototype属性,它代表一个指向原型的引用
在我的另一篇文章中,介绍了构造函数,分析了构造函数的缺点,即使用构造函数时,每创建一个对象时,方法需要被复制,创建对象多时,会极大占用内存资源,影响应用程序的运行效率
而原型概念则完美的解决了这一问题。我们来创建几个小狗对象
var wangcai = new Dog('wangcai','20')
var xiaoqiang = new Dog('xiaoqiang','10')
var zhaocai = new Dog('zhaocai','15')
wangcai.bark()
xiaoqiang.bark()
zhaocai.bark()
正如上面的例子,这些小狗对象,都有brak方法,但是,在创建对象的时候bark方法不需要被复制,这里调用的bark方法只有一个,那就是原型的方法,JavaScript在查找方法的过程是这样的:
- 在对象中查找有没有定义bark方法
- 有则调用,没有定义它就会追溯原型链,直到找到bark之后再调用方法。这样一来不管创建多少个对象,都不会受影响,因为大家都共用一个方法,实现了共享