一:前言
JS高级的学习是将我们从会写代码到知道他的一些细节原理的过渡,截至目前JS高级的学习中我从原型链中有很多体会,在说体会之前首先我们要知道原型的一些东西。我们都知道JS中是通过原型链(隐式原型链)实现的继承功能,他的主要作用就是提高代码的复用性。
二:准备
在说具体内容之前我们要明白一个东西,就是Object()是Function()的一个实例,而Function()又是自己的实例。原型是Object的实例,所以所有原型的__proto__属性直接指向Object的原型,而Object也是对象,但是它已经是最终的版本了,所以它的__proto__属性是null。
函数特有的属性是prototype和constructor属性,而实例对象特有的是__proto__,又因为函数也是对象,所以函数也有__proto__属性。
三:内容
在明白这些东西之后我们就可以讲一下原型了
//声明一个构造函数Fn(它是Fnuction的实例)
function Fn(){
this.text1=function(){
console.log("text1")
}
}
//往构造函数Fn中添加函数text2
Fn.prototype.text2=function(){
console.log("text2")
}
//fn是Fn的一个实例对象(不是函数,只具备__proto__属性)
var fn=new Fn()
fn.text1()
fn.test2()
console.log(fn.toString())//通过隐式原型链可以找到该属性
console.log(Fn.prototype)//结果中有添加的text2函数
console.log(Fn.prototype.__proto__===Object.prototype)//true
fn.text3()//报错,因为在所有的原型中都没有text3属性,最终找到的是null,但null不能作为函数调用
下面我们来看一下它的图解:

由于篇幅原因,这次只是简单的说明一下原型链,后续会为大家带来完整的原型链讲解。
四:总结
原型链的理解还是有难度的,因为很多细节的东西我们需要考虑,实在不行就画个图理解一下,画的多了就自然会了。
179

被折叠的 条评论
为什么被折叠?



