面向对象篇(四)

function CreatePerson(name){
   this.name = name;
   this.showName = function(){
        alert(this.name);
   }
}
var p1 =new CreatePerson('张三');   
p1.showName(); //张三 

var p2 =new CreatePerson('李四'); 
p2.showName(); //李四

上面的代码,看似没有什么问题,我们来看一个问题

console.log(p1.showName == p2.showName);       //false

看似同样的一个方法,对比起来却是false,这是因为,方法也是对象,而对象之间的比较不仅仅是值相等,而且引用地址也要相同,这两个函数的比较之所以不相等,就是因为虽然值相等,但是引用地址不相等,那么这也就意味着,同样的一个方法,要在内存中存放两份,现在是两个如果是100个这样的方法呢,就会大大的消耗内存,那么怎么解决这种问题呢,这就要说到js中一个非常重要的概念------原型,即prototype,原型就可以解决这种问题,不管多少,内存中都存在一份,我们来看代码怎么写

function CreatePerson(name){
   this.name = name;
}
CreatePerson.prototype.showName = function(){
    alert(this.name);
}
var p1 =new CreatePerson('张三');   
p1.showName(); //张三 

var p2 =new CreatePerson('李四'); 
p2.showName(); //李四

console.log(p1.showName == p1.showName);  //true;

我们看到原型prototype是挂载在构造函数下面的,把方法再挂载到原型下面,我们可以看到,这个时候p1.showName和p2.showName就已经相等了,返回了true,

这样我们就写出了一个完整的面向对象的程序。

原文地址:https://www.cnblogs.com/chenzhiyu/p/8376065.html