zoukankan      html  css  js  c++  java
  • ProtoType原型和__Proto__原型链的详解

       var arr = new Array(12,13,14,15,16,17,18);
       var arr2 = new Array(12,13);
       arr.sun=function(){
       //用原型加Array.prototype.sun=function() 下面的alert(arr2.sun())生效,就不会出现说arr2没有sun方法,这就好像css里面的class给一组元素加样式
        //如果只是arr.sun,就好像是行间样式alert(arr2.sun())不会生效,因为他没有想arr那样加sun方法
    var reun = null; for(var i=0;i<this.length;i++){ reun+=this[i] } return reun; }
    alert(arr.sun()) alert(arr2.sun())
      // prototype函数才有的属性(prototype为函数增加方法(共用))  __proto__对象才有的属性(所以函数也有这个__proto__只不过为隐形的)
      // 最终他们是相等的 → console.log(__proto__===constructor.prototype) //ture
    
        var a = {}
        console.log(typeof a.prototype)//undefined
        console.log(a.__proto__)//对象集合
        console.log(typeof a.__proto__) //object
    
        var b = function(){}
        console.log(typeof b.prototype)//object
        console.log(b.prototype)//b{}
        console.log(typeof b.__proto__)//function
        console.log(b.__proto__)//function(){}
    
      // 原型链
      // 因为__proto__是任何对象都有的属性 在js中万物皆对象 所以会形成一个__proto__连起来的链条 递归访问到最后 值为空
      var c = function(){}
      
    var d = new c()
      console.log(
    typeof d.__proto__) //object
      console.log(d.__proto__)//c() 构造器fucntion c的原型对象
      console.log(typeof d.__proto__.__proto__)//object
      console.log(d.__proto__.__proto__)//object() 构造器fucntion object的原型对象
      console.log(typeof d.__proto__.__proto__)//object
      console.log(d.__proto__.__proto__.__proto__)//null
      所有对象都有隐形原型(__proto__)
      let a
    = 123
      console.log(a.__proto__)
      console.log(
    ''.__proto__)
      以上都会打印出 该对象所拥有的方法

     原型的概念很简单

      所有对象都有一个属性 __proto__ 指向一个对象,也就是原型
      每个对象的原型都可以通过 constructor 找到构造函数,构造函数也可以通过 prototype 找到原型
      所有函数都可以通过 __proto__ 找到 Function 对象
      所有对象都可以通过 __proto__ 找到 Object 对象
      对象之间通过 __proto__ 连接起来,这样称之为原型链。当前对象上不存在的属性可以通过原型链一层层往上查找,直到顶层 Object 对象
      原型链的本质是链表。
      原型链上的节点是各种原型对象,
      什么是原型对象呢   js里面有很多内置的类   比如 function
    object string number   所谓原型对象就是这些类的prototype的属性值
      原型链通过_proto_属性连接各种原型对象
  • 相关阅读:
    OpenStack安装及监控配置视频教程
    具有可视化的功能的一款开源软件Gource
    Ubuntu 12.04使用演示
    VisualRoute for Mac OS 体验
    P1006-传纸条
    Leetcode-1157 Online Majority Element In Subarray(子数组中占绝大多数的元素)
    Leetcode-1156 Swap For Maximum Repeated Substring(单字符重复子串的最大长度)
    Leetcode-1155 Number of Dice Rolls With Target Sum(掷骰子的N种方法)
    Leetcode-1154 Ordinal Number Of Date(一年中的第几天)
    P1508-Likecloud-吃、吃、吃
  • 原文地址:https://www.cnblogs.com/Model-Zachary/p/7414067.html
Copyright © 2011-2022 走看看