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

JavaScript构造函数实例创建后如何修改属性值?修改cat.raining为true仍不发声

问题产生原因

  1. 方法调用时机错误:你在执行cat.makeNoise()之后才修改cat.raining的属性值,前一次cat.makeNoise()运行时,cat.raining还是初始化的false,自然不会触发打印逻辑,属性修改后没有重新调用方法。
  2. 方法内部属性引用不规范:makeNoise方法中直接打印的是构造函数入参的noise闭包变量,而非实例自身的this.noise属性,虽然当前场景下值暂时一致,但如果后续修改实例的noise属性,方法输出不会同步更新,不符合需求中「打印noise属性的值」的要求。

正确实现方案

先修正构造函数的makeNoise方法逻辑,再在修改cat.raining属性后重新调用makeNoise即可,完整可运行代码如下:

function Animal(raining, noise) {
    this.raining = raining;
    this.noise = noise;

    this.makeNoise = function(){
        if(this.raining) {
            // 访问实例自身的noise属性
            console.log(this.noise)
        }
    }
}
// 创建dog和cat实例
let dog = new Animal(true, 'Woof!');
let cat = new Animal(false, 'Meow!');

// 第一次调用方法
dog.makeNoise(); // 输出 Woof!
cat.makeNoise(); // raining为false,无输出

// 修改cat的raining属性
cat.raining= true;
// 修改属性后重新调用方法
cat.makeNoise(); // 输出 Meow!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:18:02