javascript - js继承的问题
天蓬老师
天蓬老师 2017-04-10 17:44:44
[JavaScript讨论组]

本人小白,跪求大神解答!

function Father () {
this.b =10
}
Object.prototype.b=6
Function.prototype.b=5
Father.prototype.b = 1;
alert(Father.b) //5

结果是5, 我原本的理解是 先搜索自身,然后搜索原型对象(Father.prototype),然后搜索上一层的原型对象。
求大神解答我的理解对于这个问题哪错了?感激不尽!!!

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(4)
巴扎黑

首先:

  • 一个object A原型对象,是A.__proto__,而不是A.prototype

  • 它指向的是其原型Bprototype,也即A.__proto__ === B.prototype

其次:

  • Father自身也是对象,其原型是Function

  • new Father()产生的对象的原型才是Father

function Father () {
    this.b =10
}
Object.prototype.b = 6;
Function.prototype.b = 5;
Father.prototype.b = 1;
var father = new Father();
console.log(father);             // Father { b: 10 }
console.log(father.__proto__);   // Father { b: 1 }
console.log(Father.__proto__);   // { [Function] b: 5 }    你看到的就是这个
高洛峰

你理解错的地方在于:构造函数创建的原型Father.prototype,是供继承的对象访问的。构造函数本身(Father)是无法访问自身的prototype原型对象的。

正因如此:
Father自身找不到b这个属性,它就会顺着原型链向上找。既

Father._proto_=Function.prototype

在Function的原型对象上正好定义了b属性为5。所以,结果等于5。

主要就一点,构造函数创建的原型对象,自己是无法访问的。

巴扎黑

一句话~ 原型可以理解为只能供这个函数构造的对象访问

就是说,函数作为构造函数才会有原型的调用

阿神

ddddddddd

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

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