zoukankan      html  css  js  c++  java
  • 关于js中原型链的理解

         我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,一个对象。无论什么时候,我们只要创建一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性对象指向函数的原型对象。在默认情况下,所有原型对象都会自动获得一个 constroctor(构造函数)属性,这个属性包含一个指向prototype属性所在函数的指针。例如:

          

    function Person(){}
    

        当我们创建这个Person函数(对象)的时候,该函数便有了一个prototype属性,它的原型对象Person.prototype会获得一个constroctor属性,那么Person.prototype.constroctor便指向了Person。更直白一点讲就是,如果我们再此基础上再加一句

    var p=new Preson();
    

      那么,p的原型就会指向构造器的prototype属性,也就是Person.prototype。

        那么,原型链具体的工作机制是什么?请看下面这个例子

    function foo(){}
    foo.prototype.z=3;
    
    var obj=new foo();
    obj.y=2;
    obj.x=1;
    
    obj.x;//1
    obj.y;//2
    obj.z;//3
    
    typeof obj.toString();//'function'
    'z' in obj;//true
    obj.hasOwnProperty('z');//false

         

      当输出obj.z的时候,并不会因为obj对象没有z属性而输出undefied,而是查找obj的原型也就是foo.prototype,这是js发现z的值是3,所以就会输出obj.z的值为3.

     实际上,我们用对象字面量创建的函数对象,其原型obj.prototype会指向Object.prototype,而Object.prototype也是由原型的,其值是null,这是上就是一个

     原型链,而这也是  typeof obj.toString(); 为function的原因,因为沿着原型链向上查找,便找到了object中的toString方法。

         

  • 相关阅读:
    在CentOS-6.9里安装openvswitch-2.5.4
    Django 2.0.7 使用小知识
    微信小程序 存储数据到本地以及本地获取数据
    微信小程序目录结构与配置介绍
    微信小程序视图层介绍及用法
    小程序 wx.request请求
    小程序的启动流程(生命周期)
    小程序的双线程模型
    小程序之基础组件
    小程序之路由跳转
  • 原文地址:https://www.cnblogs.com/qqqiangqiang/p/5161192.html
Copyright © 2011-2022 走看看