原型的作用: 1.数据共享 节约内存内存空间 2.实现继承 注意:函数也是一个对象,对象不一定是函数。(对象有__proto__属性,函数有prototype属性)此处说明,方便大家理解下文。
下面我将举例说明为什么要使用原型 例1:
function Person(name) { this.name=name; this.eat=function () { console.log(this.name+"吃东西"); } this.sleep=function () { console.log(this.name+"睡觉"); } } var p1=new Person("小明"); p1.eat();//小明吃东西 p1.sleep();//小明睡觉 var p2=new Person("小利"); p2.eat();//小利吃东西 p2.sleep();//小利睡觉 console.dir(p1);//dir()打印结构 console.dir(p2);每次使用构造函数Person()实例化出对象的时候,就会给每个实例对象的eat()方法和sleep()方法开辟空间。可是当实例化许多对象的时候,就会浪费大量的空间,因为每个实例对象的eat()方法和sleep()的功能都是一样的,所以我们没必要为每个实例对象添加eat()方法和sleep()方法。
这时原型就派上用场了,看下面经过改造的例子:
function Person(name) { this.name=name; } Person.prototype.eat=function () { console.log(this.name+"吃东西"); }; Person.prototype.sleep=function () { console.log(this.name+"睡觉"); } var p1=new Person("小明"); p1.eat();//小明吃东西 p1.sleep();//小明睡觉 var p2=new Person("小利"); p2.eat();//小利吃东西 p2.sleep();//小利睡觉 console.dir(p1); console.dir(p2);eat()方法和sleep()被添加到了Person()构造函数的原型(prototype)上了。因此只有一份eat()方法和sleep()方法。当实例对象需要使用这些方法的时候就在自己的__proto__属性中找到并调用这些方法实现相应的功能。