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,

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

  • 相关阅读:
    不弹出提示直接关闭页面
    orcale表解锁
    序列化和反序列化
    js 实现post传参
    简易实现 instanceOf
    简易实现virtualdom
    react中setState同步、异步问题
    CMake Qt 配置 OpenCV
    VS执行时打开cmd
    VS2019+Qt5.15.2环境配置
  • 原文地址:https://www.cnblogs.com/chenzhiyu/p/8376065.html
Copyright © 2011-2022 走看看