javascript - 请问prototype与__proto__的含义、区别以及使用场景?
黄舟
黄舟 2017-04-11 09:56:54
[JavaScript讨论组]

这个问题一直困扰我很久了!希望可以在sf得到完整的解答!!

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(4)
PHP中文网

之前学习原型链的时候接触到__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属性


有点乱,有时间再改

ringa_lee

日经问题,下次请搜索之后再来问:

javascript中__proto__和prototype的区别
javascript constructor _.proto._ prototype 概念相关

PHP中文网

请问prototype与__proto__的含义、区别以及使用场景?

作用:
prototype 用来实现 js继承

proto 用来实现原型链

区别:
相同点:都是一个属性, var a = {};a.b =1; 跟这个b没啥区别,只是功能特殊。
不同点:看作用就知道不同,一个是锅,一个是铲子,没啥好比较的

使用场景:
prototype你总在用,写一个js类,需要继承的你都放这个属性下
__proto__你基本不会去用,js引擎实现原型链用的,什么是原型链,是另外的问题。

接下来看图一看就明白。 如果看了此回答还不明白,请告诉我哪里不明白,我随时更新此答案!

大家讲道理

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号