• javaScript——原型


    每次面试,必问原型。

    那么原型到底是个啥?

    简单明了的说,只要是个函数(称为fn),都会有一个叫做prototype的原型属性,他的值就叫做原型对象(即fn.prototype)。

    //(原型属性)
    prototype:{   }//(fn.prototype原型对象);

    原型对象里又包含一个属性constructor,他的值是唯一的,且指向这个函数。

    //(原型属性)
    prototype:{ //(fn.prototype原型对象);
       //constructor的唯一值为fn
      constructor:fn
    }

    现在我们可以简单的写一个构造函数,然后把原型对象打印出来看看长啥样

    function Fn(){}
    //打印一下原型对象
    console.log(Fn.prototype);

     

    给原型对象加点东西试试

    function Fn(){
     }
     Fn.prototype.name = '张三';
     Fn.prototype.age = '19';
     Fn.prototype.eat = function(){
         return '米饭'
     }
     console.log(Fn.prototype);

    从打印结果来看呢,基本跟上述的描述是相符的,但多出来的_proto_是什么鬼,我们继续往下看。

     现在我们new一个Fn的实例对象,打印看一下,是个啥

    //Fn的实例对象f1
    var f1 = new Fn();
    console.log(f1);

    也有一个_proto_属性。而且发现,f1._proto_ === Fn.prototype

    现在我们做一个有意思的事情,定义一个对象,定义一个数组,打印一下

    //var obj = new Object(); 
    var obj = {};
    console.log(obj);
    console.log(Object.prototype);
    //var arr = new Array();
    var arr = [];
    console.log(arr);
    console.log(Array.prototype);

    发现数组、对象都有一个_proto_属性。而且obj._proto_ === Object.prototype、arr._proto_=== Array.prototype。(数组的也是一样的,这里就不占空间了)

    由此,我们基本可以得出,每个对象都有一个_proto_属性,且指向创造该对象的函数的prototype。

    那基本就可以得到原型链及继承

    f1._proto_ === Fn.prototype  ——》》 Fn.prototype._proto_ === Object.prototype  ——》》 Object.prototype._proto_(打印发现返回nudefined)

     如果看到这里还是不懂,我推荐看深入理解javascript原型系列以及阮一峰的javascript面向对象编程

  • 相关阅读:
    golang 识别redis key在哪个codis的slot上
    QAT SSL加速卡安装及使用
    dereferencing pointer to incomplete type错误的解决办法
    golang topN算法
    golang日志框架zap简洁配置
    golang 读取文件
    Django学习目录
    go练习:循环与函数
    全站搜索实战应用(Lucene.Net+盘古分词)
    (原创)将Datatable数据按照Excel模板格式导出
  • 原文地址:https://www.cnblogs.com/hess/p/10973308.html
Copyright © 2020-2023  润新知