JavaScript中的原型链prototype介绍

前端之家收集整理的这篇文章主要介绍了JavaScript中的原型链prototype介绍前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

@H_301_0@JavaScript中的继承是通过原型链(prototype chain)来完成的:每个对象内部都有另外一个对象作为其prototype而存在,对象从这个prototype中继承属性(property)。对于每个对象来说,可以用以下三种方式来访问其原型对象:

@H_301_0@1.proto。可以通过对象的proto属性来访问其原型对象。该属性仅在Firefox、Safari和Chrome中得到支持,在IE和Opera中不支持

@H_301_0@2.Object.getPrototypeOf()。可以将对象作为参数传入Object.getPrototypeOf()方法,执行后即返回对象的原型对象。此方法仅在ECMAScript 5标准中得到支持

@H_301_0@3.o.constructor.prototype。通过先获取对象的constructor函数,然后再通过访问constructor函数的prototype属性来访问到原型对象。使用此方法的前提为:对象中存在指向构造函数的constructor属性

@H_301_0@判断两个对象间是否存在原型链关系可以使用isPrototype()方法


@H_301_0@
<div class="codetitle"><a style="CURSOR: pointer" data="44967" class="copybut" id="copybut44967" onclick="doCopy('code44967')"> 代码如下:
<div class="codebody" id="code44967">
var p = {x:1};
var o = Object.create(p);
console.log(p.isPrototypeOf(o));//true

@H_301_0@ 对于所有用字面量创建的对象而言,其prototype对象均为Object.prototype(作为一个特殊对象,Object.prototype没有原型对象):

@H_301_0@
代码如下:

@H_301_0@ 而对于所有用new操作符创建的对象而言,其prototype对象均为constructor函数的prototype属性

@H_301_0@
代码如下:

@H_301_0@ JavaScript中使用new操作符创建对象的过程如下:

@H_301_0@1.创建一个新的空对象。
2.将这个对象的proto属性指向constructor函数的prototype属性
3.将这个对象作为this参数,执行constructor函数

@H_301_0@从上述创建过程可以得出结论:所有从同一个constructor函数中构造出来的对象,其proto属性(也即其原型对象)相等,也就是说,只存在一个原型对象:


@H_301_0@
<div class="codetitle"><a style="CURSOR: pointer" data="54175" class="copybut" id="copybut54175" onclick="doCopy('code54175')"> 代码如下:
<div class="codebody" id="code54175">
var t = new Test(38);
var t2 = new Test(68);
console.log(t === t2);//false
console.log(t.proto === t2.proto);//true

猜你在找的JavaScript相关文章