抱歉 - 我无法准确解释这个问题,所以我给你举个例子。
window.onload = function() {
var obj = new classs(2);
alert(obj.x2);
function classs(value){
this.value = value;
var multiplication = function(value, n){
console.log(n);
return parseInt(value) * parseInt(n);
}
this.x1 = multiplication(this.value, 1);
this.x2 = multiplication(this.value, 2);
this.x3 = multiplication(this.value, 3);
}
}
所以我只调用obj.x2
,但console.log(n);
打印3次。我做错了什么?
答案 0 :(得分:3)
读取x2
属性不会导致任何内容记录到控制台,它只会读取已经计算的值。
创建x1
对象时会计算属性x2
,x3
和classs
,因此在您阅读{{1}之前,会将值记录到控制台中属性。如果您注释掉使用x2
属性的行,则仍会记录这些值。
如果要在创建对象后进行计算,则需要使用函数:
x2
用法:
this.x2 = function() { multiplication(this.value, 2); }
答案 1 :(得分:0)
因为您只需调用乘法3次
创建对象时
var obj = new classs(2);
它在它内部执行代码,你可以看到有3个函数调用“乘法”。
this.x1 = multiplication(this.value, 1);
this.x2 = multiplication(this.value, 2);
this.x3 = multiplication(this.value, 3);
答案 2 :(得分:0)
当执行类时,当设置x1,x2和x3时,乘法函数执行三次。这就是为什么console.log被击中3次的原因。另一方面,警报只发生一次,因为你在obj.x2上调用警报。