今天我们来讲解一下js中的原型链,这可是js进阶中必不可少的一部分。
“函数”是我们在学习js中最常见的对象,每个实例化的对象都有一个私有属性( __proto__ )指向它的构造函数的原型对象(prototype ),每个原型都有一个自己的原型对象,基本上所有的对象最后的原型链都是Object的实例。
例子:
function Person() {
}
Person.prototype.eat = function () {
return this;
}
function Women() {
this.subpeople = false;//实例中的属性
this.hello = function () {//实例中的函数
return this;
}
Women.prototype = new Person();
var ins = new Women();
console.log(ins.eat());
首先我定义了一个Person函数,然后再原型链上添加eat函数,然后再创建了一个Women函数,让Women函数的prototype等于 Person函数的实例。这样我们在实例化一个Women函数之后,就可以使用Person函数中原型链中的函数以及属性。这就有点像后端语言中的继承了,我们到控制台来看看这个实例对象“ins”的原型层级。
首先是Women函数中定义的函数和属性,我们可以看到__proto__ 属性指向了Person。
把Person展开,可以看到eat函数,Person的__proto__属性指向了Object,前面说过,基本上所有的对象最后的原型链都指向Object。
所以整个原型链的顺序如下:
{subpeople: false, hello: ƒ} >> {eat: ƒ} >> Object.prototype >> null。
如果大家去阅读过Jquery的源码,就会更了解原型链了。基本上jquery中所有的函数都是放在原型链中,大家可点击下方链接看看jquery中是如何使用原型链的。