JavaScript构造函数实例创建后如何修改属性值?修改cat.raining为true仍不发声
问题产生原因
- 方法调用时机错误:你在执行
cat.makeNoise()之后才修改cat.raining的属性值,前一次cat.makeNoise()运行时,cat.raining还是初始化的false,自然不会触发打印逻辑,属性修改后没有重新调用方法。 - 方法内部属性引用不规范:
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
相关产品推荐
相关产品推荐

