扫码关注官方订阅号
这个问题一直困扰我很久了!希望可以在sf得到完整的解答!!
人生最曼妙的风景,竟是内心的淡定与从容!
之前学习原型链的时候接触到__proto__也是有点懵逼,最近回答问题时重新看了一遍,也算是搞懂了,初学欢迎指正,其实题主比我执着多了,这点值得肯定!刚开始遇到__proto__我是直接跳过去了,粗略地了解了一下,下面是现在我自己的理解,希望对你看其他技术博客有点帮助。
推荐链接----王福明 学习原型的博客
1、每个对象(包括函数、函数的prototype对象)都有一个__proto__属性,她指向创建该对象的函数的prototype属性
2、每个函数都有一个prototype对象,而只有prototype对象才有constructor属性,其指向该函数本身
上面说的太抽象,我们来看一个例子
function Person (name,age){ this.name = name; this.age = age; } var p = new Person("xiaoming", 19);
console.dir(Person); //我们来看一下Person函数里面的属性
①现在我们可以看到Person函数里面有prototype属性,里面的属性方法我们就不加深入,只要知道我们可以往里面添加方法属性就可以了
②再来看一下__proto__属性,这也每个对象都有的属性,函数也是一个对象,同样也有__proto__属性,那她指向哪里呢,我们知道__proto__属性指向创建该对象的函数的prototype,而Person函数是谁创建的呢?
函数都是由function Function(){}创建的,所以上图__proto__实际上就是Function.prototype
console.log(p); //来看一下p对象中的属性
这里就没有prototype属性了,因为对象p不是一个函数,prototype是只有函数才有的属性
上面的__proto__指向一个对象,这里只是写了Object,实际上是Person.prototype,因为p是由Person函数创建的,所以p对象的__proto__指向Person.prototype,我们来看看全图
而Person.prototype里面的constructor属性为原函数本身
我们可以看到Person.prototype里面也有__proto__属性,因为,她也是一个对象。
总结:①每个对象(包括函数、函数的prototype对象)都有一个__proto__属性,她指向创建该对象的函数的prototype属性②只有函数才有prototype属性
有点乱,有时间再改
日经问题,下次请搜索之后再来问:
javascript中__proto__和prototype的区别javascript constructor _.proto._ prototype 概念相关
请问prototype与__proto__的含义、区别以及使用场景?
作用:prototype 用来实现 js继承
proto 用来实现原型链
区别:相同点:都是一个属性, var a = {};a.b =1; 跟这个b没啥区别,只是功能特殊。不同点:看作用就知道不同,一个是锅,一个是铲子,没啥好比较的
使用场景:prototype你总在用,写一个js类,需要继承的你都放这个属性下__proto__你基本不会去用,js引擎实现原型链用的,什么是原型链,是另外的问题。
接下来看图一看就明白。 如果看了此回答还不明白,请告诉我哪里不明白,我随时更新此答案!
现在去理解这两个词的含义好轻松(不知道当时到底卡在哪里了。。=,=)~谢谢各位的提点
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
之前学习原型链的时候接触到__proto__也是有点懵逼,最近回答问题时重新看了一遍,也算是搞懂了,初学欢迎指正,其实题主比我执着多了,这点值得肯定!刚开始遇到__proto__我是直接跳过去了,粗略地了解了一下,下面是现在我自己的理解,希望对你看其他技术博客有点帮助。
推荐链接----王福明 学习原型的博客
1、每个对象(包括函数、函数的prototype对象)都有一个__proto__属性,她指向创建该对象的函数的prototype属性
2、每个函数都有一个prototype对象,而只有prototype对象才有constructor属性,其指向该函数本身
上面说的太抽象,我们来看一个例子
console.dir(Person); //我们来看一下Person函数里面的属性
①现在我们可以看到Person函数里面有prototype属性,里面的属性方法我们就不加深入,只要知道我们可以往里面添加方法属性就可以了
②再来看一下__proto__属性,这也每个对象都有的属性,函数也是一个对象,同样也有__proto__属性,那她指向哪里呢,我们知道__proto__属性指向创建该对象的函数的prototype,而Person函数是谁创建的呢?
函数都是由function Function(){}创建的,所以上图__proto__实际上就是Function.prototype
console.log(p); //来看一下p对象中的属性
这里就没有prototype属性了,因为对象p不是一个函数,prototype是只有函数才有的属性
上面的__proto__指向一个对象,这里只是写了Object,实际上是Person.prototype,因为p是由Person函数创建的,所以p对象的__proto__指向Person.prototype,我们来看看全图

而Person.prototype里面的constructor属性为原函数本身
我们可以看到Person.prototype里面也有__proto__属性,因为,她也是一个对象。
总结:
①每个对象(包括函数、函数的prototype对象)都有一个__proto__属性,她指向创建该对象的函数的prototype属性
②只有函数才有prototype属性
有点乱,有时间再改
日经问题,下次请搜索之后再来问:
javascript中__proto__和prototype的区别
javascript constructor _.proto._ prototype 概念相关
请问prototype与__proto__的含义、区别以及使用场景?
作用:
prototype 用来实现 js继承
proto 用来实现原型链
区别:
相同点:都是一个属性, var a = {};a.b =1; 跟这个b没啥区别,只是功能特殊。
不同点:看作用就知道不同,一个是锅,一个是铲子,没啥好比较的
使用场景:
prototype你总在用,写一个js类,需要继承的你都放这个属性下
__proto__你基本不会去用,js引擎实现原型链用的,什么是原型链,是另外的问题。
接下来看图一看就明白。 如果看了此回答还不明白,请告诉我哪里不明白,我随时更新此答案!

现在去理解这两个词的含义好轻松(不知道当时到底卡在哪里了。。=,=)~谢谢各位的提点