原型的作用一:数据共享,节省空间
在函数作为构造函数时,在构造函数内部用this.method 初始化对象方法会使得每一个实例化出来的对象都有一个相同的但是占用不同内存的方法
function Person(){
this.say = function(){
console.log('Hi');
}
}
当我们去实例化对象时,每一个对象都有一个say方法,虽然作用相同,但是是不同的方法,占用不同的内存空间。
我们可以这样改进
function say(){
console.log('Hi);
}
function Person(){
this.say = say;
}
这样可以让每个实例对象只是得到函数say的一个指针,指向同一个say函数,节省了空间,但是显然这个类失去了封装性。
所以我们要用到原型
function Person(){}
Person.prototype.say = function(){
console.log('Hi');
}
利用原型可以使得每一个实例对象都可以调用原型上的say方法,而且节省了内存.
原型的作用二:继承
下面介绍组合式继承,
组合式继承 = 原型继承 + 借用构造函数继承
function Person(name) {
this.name = name;
this.friends = ['Mike','Jack'];
}
function Chinese(name,age) {
Person.call(this,name);
this.age = age;
}
Chinese.prototype = new Person();
在子类构造函数中借用父类构造函数,再通过原型继承父类的原型属性和方法,模拟继承的效果