javascript - js 原型的问题 Object 和 Function 到底是什么关系?
PHPz
PHPz 2017-04-10 15:11:55
[JavaScript讨论组]
var F = function(){};
Object.prototype.a = function(){};
Function.prototype.b = function(){};

F既能访问到a,也能访问到b(Object 和 Function也同样, 但是所有的实例只能访问到a),F是Object 和 Function两个的实例, 那么 Object 和 Function 到底是什么关系?

这是我对 Object 和 Function 的了解

F instanceof Object
true
F instanceof Function
true
Object instanceof Function
true
Function instanceof Object
true



Object:
function Object() { [native code] }
Object.constructor function Function() { [native code] }
Function:
function Function() { [native code] }
Function.constructor == Function true


Object == Function false

能看出两个问题
1.Object 和 Function 互为实例
2.有相同的构造函数 function Function() { [native code] }
3.Object 和 Function 不相等

Number instanceof Number false
Number instanceof Function true
Number instanceof Object true
Number.constructor function Function() { [native code] }

Array instanceof Object true
Array instanceof Function true

4.其他基本类型或者非基本类型也都既是 Object的实例也是Function的实例

PHPz
PHPz

学习是最好的投资!

全部回复(3)
高洛峰

Object.prototype是所有对象的根源
Object.prototype只是挂载在Object函数对象上
Function.prototype构造自Object.prototype
Function.prototype 只是挂载在Function函数对象上
Object函数和Function函数构造自Function.prototype
Object字面量对象{}构造自Object.prototype
Object字面量对象{}.__proto__(原构造对象) === Object.prototype
Function函数 和 自定义函数 都继承(构造而成)自Function.prototype
Function.prototypeFunction.__proto__(原构造对象)相同
所以,是先有的Object.prototype,再有的Function.prototype,再有的FunctionObject函数对象

高洛峰
Object.__proto__
> function Empty() {}
Function.__proto__
> function Empty() {}

他们的隐式原型相同,所以相互 instanceof 都为 true.

怪我咯

有点乱,我讲下我的理解:
Object可以理解为object对象,也可以理解为Object方法,所以,他是Function的实例(Object方法)。
Function可以理解为方法对象,所以是Object对象的实例。

代码中的F先被赋值未一个Function的实例,这个时候继承了Function的方法和Function继承的Object的prototype上的方法。
对Object和Function添加方法后,Object被修改了,所以F上有了Object的新方法a。
修改Function没有影响F是因为,F已经被赋值了老的Function,已经是老Function的实例了,b方法给Function并不会影响到老Function的实例。

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

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