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

Object.assign 异常行为解析:为何以下代码执行输出"222"?

代码输出"222"的原因

咱们拆解下这段代码的执行逻辑:

  • 类方法的存储位置
    MyClass中的print方法是定义在类的原型对象(MyClass.prototype)上的。当用new MyClass()创建实例时,这个实例自身并没有print这个自有属性,调用实例的print时,是顺着原型链找到原型上的方法。

  • Object.assign的复制规则
    Object.assign(target, source)只会把源对象的自有可枚举属性复制到目标对象上,完全不会处理原型链上的属性。这里的源对象是new MyClass(),它本身没有任何自有可枚举属性,所以这行赋值代码实际上没有对a做任何修改。

  • 最终调用的方法
    a一开始就定义了属于自己的print方法,既然Object.assign没覆盖它,调用a.print()自然就执行a自身的方法,输出"222"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:52:01