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

如何为构造函数生成的实例对象的数组属性添加字符串?

问题解决:给构造函数实例的数组属性添加字符串

你的代码核心问题

  1. learnTrick方法误操作构造函数而非实例:你在learnTrick里修改的是Dog构造函数本身的tricks属性,而不是调用方法的实例(比如fido)的tricks数组。且用Dog.hasOwnProperty(string1)做判断完全不符合逻辑,我们要操作的是每个实例独有的数组。
  2. performTrick方法判断逻辑错误:你遍历Dog的属性来检查技能,这完全不对,应该检查当前实例的tricks数组是否包含目标技能字符串。

修正后的完整代码

function Dog(name, breed) {
    this.name = name;
    this.breed = breed;
    this.tricks = []; // 每个实例初始化独立的空技能数组
}

Dog.prototype = {
    constructor: Dog,
    learnTrick: function (trick) {
        // 直接将技能添加到当前实例的tricks数组
        this.tricks.push(trick);
    },
    performTrick: function (trick) {
        // 检查当前实例的tricks数组是否包含该技能
        if (this.tricks.includes(trick)) {
            console.log(`${this.name} performed ${trick}!`);
        } else {
            console.log(`${this.name} doesn't know that trick.`);
        }
    }
}

const fido = new Dog('Fido', 'poodle');

// 测试代码
fido.learnTrick('fetch');
fido.performTrick('fetch'); // 输出: Fido performed fetch!
fido.performTrick('sit'); // 输出: Fido doesn't know that trick.

关键修正点说明

  • 正确使用this:原型方法里的this指向调用该方法的实例(比如fido.learnTrick()时,this就是fido),所以用this.tricks才能访问到当前实例的技能数组。
  • learnTrick简化逻辑:不需要额外判断,直接用push把新技能添加到实例数组即可,每个实例的tricks都是独立存储的。
  • performTrick高效检查:用数组的includes方法直接判断技能是否存在于当前实例的tricks数组中,逻辑清晰且高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:35:20