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 

 

 

posted @ 2021-03-08 15:14  吴先雨  阅读(109)  评论(0编辑  收藏  举报