原型Prototype的由来

159 阅读1分钟

在没有prototype之前,我们构造函数的方法一般是这么写的:

function Star(name,age){
    this.name=name;
    this.age=age;
    //构造函数的方法
    this.sing=function(){
        console.log("我会唱歌");
    }
}
//初始化两个实例对象
var ldh = new Star('刘德华',18);
var zxy = new Star('张学友',20);

图片.png

但是这种情况下实例化的对象,每一个对象都分别新开一个空间存放sing方法,一旦实例化对象越来越多会造成内存空间的浪费。因此我们引入了prototype的概念,实现方法共享,所有实例化对象都使用同一个方法。

JavaScript规定,每一个构造函数都有一个prototype属性,指向另一个对象,这个对象的所有属性和方法都会被构造函数所拥有。

function Star(name,age){
    this.name=name;
    this.age=age;
}
//方法写入构造函数的prototype对象中
Star.prototype.sing = function(){
    console.log("我会唱歌");
}
//初始化两个实例对象
var ldh = new Star('刘德华',18);
var zxy = new Star('张学友',20);
总结:

一般情况下,公共属性定义到构造函数内部,公共方法定义到原型对象prototype上