zoukankan      html  css  js  c++  java
  • 什么是原型链?

    构造函数和原型链

    原型链:通过隐式原型把一些构造函数层层的串起来,因为所有的对象都是继承自Object。

    function CreateObj(uName) {
       this.userName = uName;    --- 写在构造函数,为this赋值的属性和方法
    }
    CreateObj.prototype.showUserName = function(){
       return this.userName;     --- 写在原型链上的属性和方法
    } var obj1 = new CreateObj('ghostwu'); var obj2 = new CreateObj('卫庄');

    1,每个函数都有一个原型属性(prototype) , 这个属性是一个指针,指向构造函数的原型对象( CreateObj.prototype), 如上图中的第1根绿色的线

    2,在默认情况下,所有原型对象都会自动获得一个constructor属性,该属性包含一个指向prototype属性所在的函数,如上图的第2根绿色的线

    3,所有的实例( 通过构造函数new出来的,都包含一个隐式原型(__proto__),该指针指向实例的构造函数的原型对象,

    如上图中的第3根线和第4根线. obj1的构造函数是CreateObj, CreateObj的原型对象是CreateObj.prototype, obj2同理,所以:

    obj1.__proto__ === CreateObj.prototype //true

    obj2.__proto__ === CreateObj.prototype //true

    4,写在构造函数中, 为this赋值的属性和方法, 在画图的过程中,把他们画在对象上面,如userName这个是给对象赋值的属性,所以在obj1和obj2这两个对象上都会存在一个属性userName

    5,写在原型对象上的方法或者属性,应该把他们画在原型对象上,如

    CreateObj.prototype.showUserName = function(){
      return this.userName;
    }
    showUserName这个方法就要画在图中CreateObj.prototype上面
    6,当一个对象访问属性和方法的时候,他的访问规则叫(就近原则), 规则如下:
    当实例上面,存在属性或者方法时,直接用实例上面的,
    如果实例上面不存在属性和方法,就会沿着实例的__proto__指针指向的原型对象继续往上查找,如果找不到,值就是undefined.
    console.log( obj1.showUserName() ); //ghostwu
    console.log( obj2.showUserName() ); //卫庄
    在obj1,obj2上面是不存在showUserName这个方法的,所以会顺着__proto__查找到CreateObj.prototype原型对象上的showUserName方法
    如果,把CreateObj.prototype原型对象上的showUserName注释掉,那么obj1.showUserName和obj2.showUserName就会报错
    // CreateObj.prototype.showUserName = function(){
    // return this.userName;
    // }

    参考:https://www.cnblogs.com/ghostwu/p/7434834.html

  • 相关阅读:
    Kali下mMetasploit数据连不上
    win10wifi消失
    cmd命令ipconfig或者ping无法使用
    WebFuzzing方法
    SyntaxError: Non-ASCII character 'xe5' in file c:/Users/Administrator/Desktop/1.py on line 6, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
    Hash传递攻击的本质、缓解方式及部分绕过手段
    python常見報錯
    How to Hack APIs in 2021(API漏洞利用)
    Burp Suite中文乱码
    RancherOS安装(方便漏洞复现)
  • 原文地址:https://www.cnblogs.com/liumcb/p/13667117.html
Copyright © 2011-2022 走看看