javascript - 关于js prototype的问题
黄舟
黄舟 2017-04-10 12:44:52
[JavaScript讨论组]

在Mozilla/Konqueror的浏览器中,对象的__proto__属性指向creator function的prototype属性

那下面这段代码,如何解释

function foo(){}

bar = new foo();

foo.prototype = new Object();

foo.prototype.constructor现在是Object()

照里说bar.__proto__.constructor也应该是Object()

但是实际上,我测试下来,bar.__proto__.constructor却仍旧是foo

请帮我指出问题出在哪?Thanks

黄舟
黄舟

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

全部回复(4)
PHP中文网

严格来说,__proto__指向的不是prototype,而是指向prototype所指向的那个对象。

你创建了一个函数对象foo。所以,foo.prototype指向一个Object对象:

1: function foo(){}

然后,以foo对象为原型创建了一个bar对象。所以,bar.__proto__指向foo.prototype所指向的这个对象,也就是指向同一个Object对象:

2: bar = new foo();

最后,让foo.prototype指向一个新的Object对象。注意,此时,bar.__proto__并没有人去修改它,仍然指向原来的Object对象:

3: foo.prototype = new Object();
我是看图说话分割线

执行完bar = new foo();后,是这样:

foo.prototype   bar.__proto__
        \            /
         \          /
          \        /
           \      /
           Object

而不是这样:

bar.___proto___
     |
     |
foo.prototype
     |
     |
  Object
阿神

没人回答,我杜撰一个吧:
bar.__proto__引用的是foo{},并不是引用foo.prototype,
虽然改了foo.prototype,但是并不影响bar._proto__引用foo{}

ringa_lee

虽然是引用类型,但是后来你new了一个Object,所以prototype就引用了object,而__proto__没有变,所以就是这样的结果了。
简单来说就是new会破坏这种object或者function变量的引用关系。

巴扎黑

foo.prototype.constructor 不是 Object() 奥
而是 foo() 本身

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

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