JavaScript中Object与Function关系的三段验证代码

作者:异步漫步

时间:2026-10-24

浏览:319

本文通过三段简单的JavaScript代码,验证Object与Function之间的相互关系。首先证明Function是Object的实例,Object也是Function的实例;其次展示为Function扩展原型方法后,Object可继承该方法;最后探讨Object扩展原型方法对Function的影响。文章旨在通过直观代码阐释函数即对象的本质。

文章目录

Function与Object的相互关系验证

在深入理解JavaScript的过程中,许多开发者曾借鉴李战老师的观点作为知识储备。本文同样沿袭这一思路,重点探讨第5章开篇提到的核心概念:函数具备对象的所有特征,可以像对象一样被调用。本质上,函数就是对象,区别仅在于函数多了一个用于执行逻辑的花括号“{}”操作符。这意味着函数本身可被调用,而普通对象则不能。基于这一深刻见解,下面通过几段简单的代码来论证JavaScript内置的Object与Function之间的关系。


  
1、Function就是Object,Object就是Function

代码如下:

 
alert(Function instanceof Object); // true
alert(Object instanceof Function); // true

从上述结果可以看出,利用instanceof操作符可以确认:Function是Object的实例,同时Object也是Function的实例。这直观地体现了函数与对象在JavaScript中的统一性。


2、既然1是成立的,那么Function扩展的原型方法,Object能“得到”吗?

Function原型方法对Object的影响

代码如下:

 
alert(Object.funcMethod); // undefined
Function.prototype.funcMethod = function() {
/*some function method code here*/
} 
alert(Function.funcMethod);
alert(Object.funcMethod);
alert(Function.funcMethod === Object.funcMethod); //true

这段代码展示了一个有趣的现象:当我们为Function扩展一个原型方法funcMethod后,Object也“不劳而获”地实现了该方法。这表明Function的原型链对Object具有影响。


3、既然1和2都成立,那么Object扩展的原型方法,Function能“得到”吗?!

代码


Object原型方法对Function的影响

代码如下:

 
alert(Function.objMethod); // undefined
Object.prototype.objMethod = function() {
/*some object method code here*/
} 
alert(Object.objMethod);
alert(Function.objMethod);
alert(Function.objMethod === Object.objMethod); //true or false?

上述代码最后一行询问:Function.objMethod与Object.objMethod是否相等?结果是true还是false?这里暂不公布答案,但根据前文的逻辑推导,读者应当能够推断出结果。


最后,作者认为这三段代码比原书中验证“函数就是对象”的代码更具说服力,因为它们通过具体的原型链操作展示了Object与Function的双向关系。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章