You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

常规JS函数是否属于类实例对象?打印为何仅显示箭头函数?

类成员函数的归属问题解答

直接说结论:你定义的常规JS函数根本不属于类的实例对象自身,它们是挂载在Person类的原型对象(Person.prototype)上的。

具体区别如下:

  • 类里直接声明的常规函数(比如displayNormalFunc1),会被JS引擎自动添加到类的原型中,所有通过new Person()创建的实例都会共享这一份函数。控制台打印实例时,默认只会展示实例自身的属性/方法,原型链上的内容不会直接显示,但你完全可以通过实例正常调用这些函数。
  • 而箭头函数形式的成员(比如displayArrowFunc1),本质是在实例化过程中,作为实例自身的属性进行赋值的,属于实例独有的,所以打印实例时能直接看到它们。

可以用代码验证这个结论:

// 查看原型上的常规函数
console.log(Person.prototype.displayNormalFunc1); // 输出函数体
// 检查是否是实例自身属性
console.log(objp.hasOwnProperty('displayNormalFunc1')); // false,说明不在实例自身
console.log(objp.hasOwnProperty('displayArrowFunc1')); // true,说明是实例自身属性

哪怕打印实例看不到常规函数,你依然可以通过objp.displayNormalFunc1()调用它,这是因为JS的原型链查找机制:当访问实例的某个属性时,如果实例自身没有,就会沿着原型链向上查找,直到找到对应的属性或方法。

内容的提问来源于stack exchange,提问作者Hasnain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 10:10:26