zoukankan      html  css  js  c++  java
  • 面向对象篇(四)

    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,

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

  • 相关阅读:
    概率论02 概率公理-集合
    概率论1 计数-排列-组合
    matplotlib 练习
    python itertools模块练习
    主观世界的破碎与重建——湖畔大学的失败课外课
    Python操作MongoDB(PyMongo模块的使用)
    python操作json数据格式--基础
    linux shell awk实现实时监控网卡流量脚本
    Python 的十个自然语言处理工具
    实现优先级队列 --heapq模块
  • 原文地址:https://www.cnblogs.com/chenzhiyu/p/8376065.html
Copyright © 2011-2022 走看看