javascript每句代码背后的故事四

原创 天下无双 随笔 原生javascript 82阅读 2019-02-26 11:11:16 举报

新建一个对象,新建个构造函数,new个实例这些都是我们经常写的代码,当我们写下它们的时候,发生了什么呢,这个要思考一下因为这个牵扯到js的原型和构造函数这方面知识,面试的时候很多面试官喜欢问。

js里面新建一个对象很简单,我们平时应该都是用对象字面量的方式

这种方式其实就是new Object()的一个语法糖而已,当我们新建一个空对象的时候,这个对象并不是空的,里面会有个隐藏的属性proto这个,这个属性指向Object.prototype。

但是如果我们是通过构造函数new的实例对象,那它就等于构造函数的原型对象

既然说到构造函数了,我们就多说点,在js里面每个函数都是构造函数,声明一个函数这个函数对象就会有自带一个prototype原型对象,原型对象其实也是一个对象,所以它也有proto属性,原型对象的proto指向Object.prototype,接上面代码也就是

从上面可以看出来,js中所有的对象和函数最终都会通过proto指向Object.protoype,不同的是对象直接通过proto指向Object.protoype,而函数是通过原型对象prototype的proto指向Object.protoype,而每次新建个函数js引擎就会自动帮他生成一个原型对象prototype。

上面这么绕其实重点只有一句话就是所有对象都有proto它指向原型,原型又是个对象里面又有proto它又指向原型就这么无限循环下去直至指向最终的Object.protoype结束,这就是所谓的原型链,一个对象在这条原型链上通往指向最终的Object.protoype的路径有多少其他原型,它就继承了多少,这就是我们常说的原型继承

我们可以写一个最简单继承,体现上面的继承方式

顺便说下,这种继承的写法在vue源码里经常使用。原型继承,对象,函数,构造函数就是这些

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复