JavaScript_proto_和prototype到底是什么玩意

JavaScript_proto_和prototype到底是什么玩意

今天去逛了贴吧,发现有人在问instanceof 的类型比较,所以比较贴心的去解释了一下,instanceof是比较左侧的_proto_和右侧的prototype是否相同,当然因为js所有的对象啊,方法,都会有_proto_这个属性,所以会一直循环下去,直到摸到顶层,也就是object.prototype._proto_结束。
结果呢,吧友表示不能理解,那

_proto_prototype到底有什么区别啊?是个什么东西啊?

在这里我头也比较大啊,小学语文没学好,所以组织能力比较差劲,所以尽量的咱用代码来解释吧。

function too() {
    this.t = 0;  
}
var t = new too()
console.log(t._proto_)
console.log(too.prototype)

这里写图片描述
看了输出以后,都能惊奇的发现,输出的是同一个东西,一个是万物皆有的proto,还有一个就是自身的构造,

也就是说,_proto_这个属性的意思是,去指向自己的父亲创造自己时用的构造方法。

prototype这个属性的意思就是,我自己生孩子(创建对象)的时候用的构造方法。

看起来有点绕来绕去的,其实说白了就是一个找爸爸怎么创建自己,一个找自己怎么创建儿子,两种东西,所以_proto_这属性能一直往上摸上去,找自己的爸爸的爸爸,爸爸的爸爸的爸爸。
那么我们来简单的试验一下,按照刚才的代码,我用function去创造了too这个对象,而用too的too()这个构造方法,去创建了t这个对象,所以关系是function生了too,too生了t,然后我们在用instanceof去比较一下三者的关系。

console.log(t instanceof too)  //true
console.log(too instanceof Function) //true
console.log(t instanceof Function) //true

猜你喜欢

转载自blog.csdn.net/qq_38604499/article/details/81385773