关于JS面向对象中原型和原型链以及他们之间的关系及这的详解

,

<代码类=癱sharp平原”> 1 zhangsan.__proto__==T痛?/>

,

注:在上述代码中人是构造函数,zhangsan则是该构造函数的一个实例化对象。

以下用一张图来解释原型对象和函数的原型之间的关系:

关于JS面向对象中原型和原型链以及他们之间的关系及这的详解“> </p> <p>由以上图片可以清楚的看出来函数原型和原型对象之间的联系:</p> <p> zhangsan是构造函数的一个实例化对象,它的__proto__则是指向它的构造函数原型,即Person.prototype; </p> <p>构造函数人()的__proto__指向函数总类函数的原型,而函数()本身也会指向函数的原型,</p> <p> Person.prototype和Function.prototype都嗨会指向对象总类的原型,即Object.prototype,对象()的__proto__指向函数。</p> <p>原型对象。原型的__proto__会指向null。</p> <p>综上:</p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p>, </p> <p> <br/> <br/> <br/> </p> <p> <br/> <br/> <br/> <br/> <br/> <br/> </p> <p> </p> 123 <代码类=癱sharp平原”>函数func(){</代码> <代码类=癱sharp空间”>,,,,,,,,,,,,</代码>,<代码类=癱sharp空间”>,,,,,,,,</代码> <代码类=癱sharp平原”>}</代码> <p>①通过函数名()直接调用:这指向窗口。</p> <代码类=癱sharp平原”> func(); </代码> <p>②通过对象。函数()调用的:这指向这个对象。</p> <p>狭义对象:</p> 12345 <代码类= var ,<代码类=癱sharp平原”> obj={ <代码类=癱sharp空间”>,,,, <代码类=癱sharp平原”>名称: <代码类=癱sharp字符串”>“obj” <代码类=癱sharp平原”>, <代码类=癱sharp空间”>,,,, <代码类=癱sharp平原”> func1: func <代码类=癱sharp空间”>,,,, <代码类=癱sharp平原”>} <代码类=癱sharp平原”> obj.func1()

广义对象:

123 <代码类=癱sharp平原”>文档。getElementById( <代码类=" csharp字符串"> " div " <代码类=" csharp平原">).onclick=function(){ <代码类=癱sharp空间”>,,,, <代码类=" csharp关键字">这 <代码类=癱sharp平原”> .style。代码写成backgroundColor= <代码类=癱sharp字符串”>“红色” <代码类=癱sharp平原”>, <代码类=癱sharp平原”>}

③函数通过数组的一个元素,通过数组下标调用的,这指向这个数12组。

<代码类=" csharp关键字"> var ,<代码类=" csharp平原"> arr=[func, 1, 2, 3]; <代码类=癱sharp平原”> arr[0]();

④函数作为窗口内置函数的回调函数调用时,这指向窗口。

12 <代码类=癱sharp平原”> setTimeout (func, 1000); <代码类=癱sharp平原”> setInterval (func, 1000);

⑤函数作为构造函数用新关键字调用时,这指向新新出的对象。

<代码类=" csharp关键字"> var ,<代码类=" csharp平原"> obj=, <代码类=" csharp关键字">新,<代码类=癱sharp平原”> func();

以上就是原型链和这的详解。


关于JS面向对象中原型和原型链以及他们之间的关系及这的详解