• 原型----------prototype详细解答


            function ren(name,age){
                this.name=name;
                this.age=age;
                this.fa=function(){
                    alert('我喜欢吃');
                }
                
            }
            
    
            var p1=new ren('w1',20);
            var p2=new ren('w2',222);
    
            alert(p1.fa==p2.fa)      //false
            alert(p1.fa()==p2.fa()); //true
            alert(p1.name==p2.name); //false

    这时候会发现

    alert(p1.fa==p2.fa) 结果为false
    new一个对象,里面函数每次执行,都重新实例创建一次相同的函数fa,拖低了函数执行效率,此时我们想到的办法是不是把fa这个方法拿出来呢
    function ren(name,age){
                this.name=name;
                this.age=age;
                this.fa=fa;
            }
            
            function fa(){
                alert(this.name);
            }
            var p1=new ren('w1',20);
            var p2=new ren('w2',222);
            p1.fa();
         p2.fa();
     

    这样在外部重新定义一个fa的函数,于之前的ren函数相对接,new出两个对象,是不是调用就是同一个fa方法呢,效率是不是提高了呢

    但是呢,这时候定义全局fa,是不是没有必要呢?不太合适呢。。。

    这时候,能不能把这些公共方法,放在一个地方呢

    伟大的prototype出现了,每一个函数都有一个prototype属性,这个属性呢,其实就是一个指针,总是指向一个对象

    这个对象,用途是什么呢?---将特定的属性和方法包含在内,起到一个所有实例共享的作用

      function ren(){
    
            }
            var obj=ren.prototype;
            //alert(obj.constructor);
            obj.name='周三';
            obj.age=20;
            obj.fa=function(){
                alert(this.name);
            };
            var p1=new ren('w',20);
            var p2=new ren();
            alert(p1.name);
            alert(p1.fa==p2.fa); //true
            p1.fa();
     alert(obj.isPrototypeOf(p1));//true

    这时候我们发现p1.fa==p2.fa结果为true了,好了,ok,这时候实例化对象,得到一个方法只有一次了

    下面就是原型图例了!

    //构造函数, 原型对象, 实例对象三者的关系
    //构造函数.prototype=原型对象
    //原型对象.constructor=构造函数
    alert(obj.constructor);
    //实例对象.prototype=原型对象
    alert(p1.prototype)   

     
  • 相关阅读:
    KVM切换声音关闭
    tmux 快捷键
    arp绑定网关MAC地址错误
    javascript的字符串模板
    cheerio, dom操作模块
    footable动态载入数据
    node-js访问rest api的方法
    重装eclipse要做的事
    爬虫(三):对requests、xpath模块
    Java-基础篇(类和对象)
  • 原文地址:https://www.cnblogs.com/null11/p/5665891.html
Copyright © 2020-2023  润新知