js原型链

js原型链

 js原型链

 js原型链

__proto__和prototype的区别:

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

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

像这样

function Fn() {
}
var fn = new Fn()
Fn.prototype===fn.__proto__ //true
 
 
 js原型链

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

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

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

 js原型链

js原型链

js原型链

 js原型链

原型链 继承
 

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

 
js原型链
 
 
 
instantof
js原型链

打比方说

js原型链

extends继承

js原型链

js原型链

yange 

js原型链