为什么实例没有prototype属性?什么时候对象会有prototype属性呢?

javascript  loudou 1月12日提问
关注 9 关注
收藏 6 收藏,554 浏览
问题对人有帮助,内容完整,我也想知道答案0 问题没有实际价值,缺少关键内容,没有改进余地
function Foo() {}
var foo = new Foo();
console.log(foo.prototype);// undefined
console.log(foo.__proto__ === Foo.prototype);// true
console.log(Foo.prototype);// [object Object]
console.log(Foo.prototype.prototype);// undefined
想请问一下哪些对象是没有prototype属性的,为什么没有,我暂时知道的就是两种对象:
1.这里的foo实例对象没有prototype属性,但是Foo函数不也是Function的实例么,为什么它就有prototype属性呢?
2.就是构造函数的prototype属性对象应该也是没有prototype属性,只有__proto__,或者说[[prototype]]属性的,对么。
或者说一说创建什么对象的时候prototype和__proto__就创建了?
1月12日提问 评论 邀请回答
查看全部 3 个回答 答案对人有帮助,有参考价值1 答案没帮助,是错误的答案,答非所问
只有函数对象有 prototype 属性(一般对象自己加的不算) 1、 foo 是 Foo 的一个实例,但是不是一个函数,所以没有prototype;Foo是Function的一个实例,而Function是一个函数,他的实例Foo也是一个函数,所以他们都有prototype。此外Object Array RegExp等也是函数。Math就仅仅是一个new Object() ,不是函数。
2、构造函数的prototype,默认情况下就是一个new Object()还额外添加了一个constructor属性。所以说默认是没有prototype只有__proto__的。
除了Object.prototype这个对象,其他所有的对象都会有__proto__属性,之后函数才会有prototype属性。 在创建对象的时候会自动创建一个__proto__属性,指向它构造函数的prototype,当访问这个对象的属性的时候会顺带访问__proto__中对应的属性,也就是构造函数prototype这样实现了继承。
只有创建函数的时候才会创建一个prototype属性,目的就是为了完成上面的继承方式。 附早年画的一个图(橙色箭头是初始的关系,绿色是执行var Fish = new Fu...创建,蓝色是执行f1= new Fish()创建。) 这样f1 就可以通过__proto__ 访问 Fish.prototype中的属性(当然这是程序执行的时候自动查找的)。Fish就可以访问 Function.prototype定义的属性。所有对象都可以访问Object.prototype 中的属性。有点儿复杂,自己仔细理一理。
1月12日回答 · 1月12日更新 评论 zonxin
7.2k 声望
你只要记住只有函数才有prototype属性,这个属性值为一个object对象
实例对象时没有这个属性的,实例对象通过__proto__这个内部属性([[prototype]])来串起一个原型链的,通过这个原型链可以查找属性,方法
通过new操作符初始化一个函数对象的时候就会构建出一个实例对象,函数对象的prototype属性指向的对象就是这个实例对象的原型对象,也就是__proto__指向的对象
1月12日回答 4 评论 kikong
15.7k 声望 准确的说,只有构造函数才有prototype属性。
通常我们自定义的函数都属于构造函数,所以都有此属性。
JS运行时环境内置的函数有些不是构造函数,比如alert和Math.sqrt等,就没有此属性。
注:构造函数是指有一个内部属性[[Construct]],通过new可以创建对象的那些函数。
1月12日回答 · 1月12日更新 评论 manxisuo
7.4k 声望


最新文章

  1. Xamarin.Android之使用百度地图起始篇
  2. android修改debug keystore文件使之和正式keystore sha1一致
  3. GoLang文件增删遍历基本操作
  4. 【No.1】监控Linux性能25个命令行工具
  5. hdu 2256 好神奇的矩阵!
  6. 学习Python遇到的那些坑
  7. android studio 加载第三方类库
  8. JavaScript类型检测, typeof操作符与constructor属性的异同
  9. BZOJ_1610_[Usaco2008_Feb]_Line连线游戏_(计算几何基础+暴力)
  10. 【Android】版本的名称
  11. Android使用统计图AChartEngine 来展示数据
  12. 两种方法实现asp.net方案的前后端数据交互(aspx文件、html+ashx+ajax)
  13. DAY1 VS2017&CUDA10.01环境搭建
  14. Canvas & SVG
  15. python概念(一)python基本数据类型
  16. AI创业的技术方案选择
  17. 平常比较多实用的SQL
  18. bzoj5049: 导航系统
  19. Exception的妙用
  20. Elegant Construction---hdu5813(构造图)

热门文章

  1. Vue.js-----轻量高效的MVVM框架(十、父子组件通信)
  2. 转 Relinking Causes Many Warning on AIX
  3. leetcode 892. 三维形体的表面积
  4. requirej入门(一)
  5. UGUI 用手柄或者键盘控制选择Scroll View中的游戏对象时,滚动条跟着移动
  6. Murano py27和py34的兼容处理
  7. 01-取消文件与svn服务器的关联
  8. Fedora 安装 phpMyAdmin(可能只有自己看得懂)
  9. C# 解决 邮件发送Excel附件后,excel处于锁定状态
  10. python面试题——数据库和缓存(46题)