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

RequireJS与Knockout实现继承时实例属性输出异常问题

问题原因

输出异常由两个错误共同导致:

  • 父类构造函数调用未绑定当前实例上下文
    Apple构造函数内的Fruit.call()没有传入第一个参数指定this指向,导致Fruit构造函数执行时没有为当前Apple实例创建专属的who方法和fruitType observable属性。
  • 所有Apple实例共享原型链上的同一个fruitType属性
    代码将Apple.prototype指向了一个单独的Fruit实例,当子类实例没有自己的fruitType属性时,所有读写操作都指向原型上这个唯一的observable值。第二次创建honey实例时赋值直接覆盖了原型上的属性,因此golden读取到的也是最新修改的值。

修复方案

修正Apple构造函数的父类调用逻辑,给Fruit.call传入当前实例的this:

function Apple(t){
  // 传入当前实例作为父类构造函数的执行上下文
  Fruit.call(this);
  this.fruitType(t);
}

修正后每个Apple实例都会在构造阶段生成专属的fruitType observable,不再共享原型属性,输出就符合预期:

Golden Delicious
Honeycrisp

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:24:02