JavaScript中的对象原型和原型链是什么意思

  介绍

这篇文章将为大家详细讲解有关JavaScript中的对象原型和原型链是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强>对象原型

相信大家都这样用过,<代码>地图> 让arr=(0, 1, 2)   让doubleArr=加勒比海盗。地图(c=比;c * 2)   console.log (doubleArr)//0、2、4

不知道你有没有想过,arr <代码> 本身并没有设定<代码> 地图属性,那为什么可以用<代码> 地图这个函数呢?

把它打印出来看看:

console.log (arr)//0:0//1:1//2:2//长度:3//__proto__:数组(0)

出现了一个名为<代码> __proto__> 映射函数,而这也正是例子中所调用的<代码>加勒比海盗。地图> console.log(加勒比海盗。地图===arr.__proto__.map)//真正的

这里出现的<代码> __proto__> 原型对象(原型)

不同于Java、c#等<>强基于类(类)强的面向对象语言,通过定义类,创建实例,指定继承等方式来传递属性及方法;Javascript则是个<>强基于原型(原型)的对语言强,通过预先建立出的原型对象,当新对象建立时指定对象的原型要参照哪个原型对象。

而当我们调用对象的属性或方法时,若对象本身没有这个属性或方法,Javascript会自动寻找它原型中的方法,这也就是为什么可以直接调用<代码>加勒比海盗。地图>

<强>原型链

你可能已经发现在前面的例子中,<代码> __proto__> __proto__ 属性:

console.log (arr.__proto__)//数组的原型   console.log (arr.__proto__.__proto__)//对象的原型   console.log (arr.__proto__.__proto__.__proto__)//空

在上述机制中,每当对象建立时都会绑定原型,既然对象都有原型,对象原型本身也是对象,自然也不例外,由这个例子中我们可以看出:

    <李> <代码> arr> <李> <代码>加勒比海盗。__proto__> <李> <代码> arr.__proto__。__proto__> <代码> <李> <代码> arr.__proto__.__proto__。__proto__>

由于每个对象都有原型,这样就形成了一个关联一个,层层相互依赖的从属关系,我们把它们叫做<强>原型链(原型链)强;通过这种机制,让对象得以使用原型中的属性和方法,并凭借原型链一层一层的按顺序继承,让对象能拥有原型链上所有原型的功能,这就是JavaScript对象背后的运作机制。

补充:在JavaScript中,几乎每个原型链的末端都会是对象,并最后指向到,零 <代码>。

<强>使用原型

说了这么多,该来点代码了,接下来就来练习一下原型的建立,设定及修改吧。

先来创建一个新的对象构造函数:

函数人(名字){   this.name=名字   }Person.prototype。你好=function () {   控制台。日志(“Hello $ {this.name}”。)   }让加里=新人(& # 39;加里# 39;)   gary.hello()//你好Gary.Object.getPrototypeOf (gary)//{你好:?,构造函数:?}

上面的例子创建了一个简单的对象构造函数<代码>人()> Array.prototype。地图> 的人。原型> 对象,并通过<代码> getPrototypeOf (obj) 获取新产生对象的原型。

问:为什么不直接用<代码> __proto__ 获取原型对象?
:因为虽然<代码> __proto__> getPrototypeOf> 提醒:<代码>的人。> 的原型,而是构造函数执行后所建立的新对象的原型;千万不要把<强>构造函数的<代码> 属原型性与<强>对象的原型强搞混!

<强>原型继承

JavaScript中的对象原型和原型链是什么意思