zoukankan      html  css  js  c++  java
  • 面试题常考&必考之--js中的难点!!!原型链,原型(__proto__),原型对象(prototype)结合例子更易懂

    1》首先,我们先将函数对象认识清楚:

     

    补充snow的另一种写法:

    var snow =function(){};

      

    2》其次:就是原型对象

    每当我们定义一个函数对象的时候,这个对象中就会包含一些内置的属性,其中有一个属性叫prototype(原型对象)

    原型对象不是谁都有的,是函数对象特有的 ,普通对象没有。但是普通对象有一个__proto__属性(叫原型)

    所有对象都有__proto__属性(原型)。

     

    总结:函数对象有原型对象(prototype)属性和原型对象中的原型(__proto__)属性。

    函数对象中的原型对象是普通对象也就是函数对象的原型对象是有原型属性的)

       普通对象只有原型(__proto__)属性。

    所有的对象都有一个原型(__proto__)属性。

     

    特例:Function.paototype依然是函数对象,不是普通对象。(特殊特殊,单独记!!!)

    但是这个函数对象里面就没有prototype属性了(也就是函数对象的原型对象没有原型对象了)

    验证:console.log(typeof(Function.prototype))//function

    console.log(typeof(Function.prototype.prototype))//undefine

    3》原型继承实例

    4》那么啥是原型链呢?

    上面提到,所有的对象都有一个属性叫做原型(__proto__)。----------------------------(在上面总结出绿色的文字处)

    那么这个原型属性是干么的呢?是用于指向创建它的函数对象的原型对象(是不是一脸懵!!!)

    仔细看实例:

    图A:

     那么,people的原型去找谁呢?

    图B:

     结合图A和图B我们画出的原型链的图为:

    5》原型链的定义总结:

          a.    在js中对象分为普通对象和函数对象,那么函数对象是通过New Function()创建的对象。除了函数对象都是普通对象。

          b.    所有对象中都有原型。但是函数对象中有原型对象(prototype),这是函数对象所特有的,函数对象的原型对象中有原型。普通对象中有原型。

          c.    所有对象都有原型属性,原型属性是用来指向创建它的函数对象的原型对象的。

  • 相关阅读:
    WebService的学习
    什么是事物
    数组和链表的区别
    JDK6和JDK7中的substring()方法
    为什么存储密码字符数组比字符串更合适?
    java中Queue简介
    java中队列Queue的使用
    HashMap、Hashtable、TreeMap的区别
    笔试算法题(36):寻找一棵二叉树中最远节点的距离 & 根据二叉树的前序和后序遍历重建二叉树
    笔试算法题(35):最长递增子序列 & 判定一个字符串是否可由另一个字符串旋转得到
  • 原文地址:https://www.cnblogs.com/snowbxb/p/11556171.html
Copyright © 2011-2022 走看看