zoukankan      html  css  js  c++  java
  • js原型链

     

     

    __proto__和prototype的区别:

    prototype是函数才有的属性,而__proto__是每个对象都有的属性

    也就是说 obj.__proto__===function.prototype

    像这样

    function Fn() {
    }
    var fn = new Fn()
    Fn.prototype===fn.__proto__ //true
     
     
     

     解释下上面代码的含义,当我定义一个obj对象(对象没有prototype,函数才有prototype)obj.toString的时候,js引擎会做下面的事情

    看看obj对象本身有没有toString()属性,如果没有,它就会去她的_proto_里面找,  如果__proto里面没有。继续往后面的proto去找,一直找到null为止,如果永远都没找到tostring()这个属性,最后返回的就是undefind.这个搜索的过程,是由着proto组成的链子一直走下去的,这个过程我们就称之为原型链 

    所以说在反爬的过程中,如果定义一个很长的原型链,我们在原型链当中去插入一个原生函数的同名函数,以此达到以假乱真的目的

     

     

    原型链 继承
     

    function Cd(){
    this.name="cd"

    }
    undefined
    function Pa(){

    this.name="Pa"
    this.sex='boy'

    }
    undefined
    Cd.prototype=new Pa()
    Pa {name: "Pa", sex: "boy"}
    var cd =new Cd()
    undefined
    cd
    Cd {name: "cd"}name: "cd"__proto__: Paname: "Pa"sex: "boy"__proto__: Object

     
     
     
     
    instantof

    打比方说

    extends继承

    yange 

  • 相关阅读:
    数组和类集排序总结
    toString()方法
    冒泡排序java
    Scanner类输入字符串和整形数字
    身份证分组
    jsonp的实质
    在伪数组上部署iterator方法
    获取属性的方法
    合并以及对于引用克隆
    深度复制对象已解决循环引用
  • 原文地址:https://www.cnblogs.com/wuxianyu/p/14499774.html
Copyright © 2011-2022 走看看