什么是原型呢?
首先我们来看一个构造函数
function X(name,sex){
this.name=name;
this.sex=sex;
this.sing=function(){
console.log("我在唱歌");
}
}
var l=new X("小熊","男");
var z=new X("小明","男");
console.log(l);
console.log(z);
一个构造函数,我们实例化了2个对象,开辟了2个内存空间
那如果有几十个对象呢,那不得有几十个内存空间,
这样就会存在浪费内存的问题。
那有什么方法能够解决这个问题?所以,就出现了原型
我们可以把那些不变的方法,直接定义在prototype原型对象上,这样所有对象的实例就可以共享这些方法。调用这些方法直接访问prototype原型对象就行
说了这么多?那原型到底是什么呢?原型的作用是什么呢?
- 每一个构造函数都有一个 prototype 属性,指向另一个对象。这个 prototype 就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有。
- 原型简单来说就是一个对象
- 原型的作用就是共享方法,资源共享
function X(name,sex){
this.name=name;
this.sex=sex;
this.sing=function(){
console.log("我在唱歌");
}
}
console.log(X);
输出这个构造函数你可以发现有原型对象(prototype)
// //构造函数存在浪费内存的问题
function X(name,sex){
this.name=name;
this.sex=sex;
// this.sing=function(){
// console.log("我在唱歌");
// }
}
X.prototype.sing=function(){
console.log("我在唱歌");
}
var l=new X("小熊","男");
var z=new X("小明","男");
l.sing();
z.sing();
console.log(l.sing === z.sing);
输出我在唱歌输出了2次,是true,所以,表明原型对象可以共享方法
一般情况下,我们的公共属性定义到构造函数里面,公共的方法我们放到原型对象身上