示例1 :
function a(){
return "ok";
}
function b(){
this.c = a;
}
var d = new b();
alert(d.c()); // Result "ok".
示例2 :
function b(){
this.c = a();
}
var d = new b();
alert(d.c); // Result "ok".
在这种情况下括号是什么意思?
答案 0 :(得分:3)
在函数之后放置()
调用 - 导致函数被执行。在您的示例中,函数为a
。
您的两个案例可以被视为:
示例1
d.c = a;
d.c(); // Call function a
示例2
d.c = a(); // Call function a, put result in d.c
d.c;
在任何一种情况下,函数a
都只用()
调用一次 - 因此它们产生相同的输出。
答案 1 :(得分:1)
第一种情况:
this.c=a;
这会将对象的c
属性(调用b
)设置为对函数 a
的引用。
可以使用()
语法调用任何函数(甚至通过引用),这是alert(d.c())
的作用。
第二种情况:
this.c=a();
此调用a
,并将c
设置为a
的结果(即返回值),即字符串“ok”。
然后,使用c
检索alert(d.c)
的值将产生与第一个示例相同的结果,但它是以完全不同的方式得出的。
一种方法存储对函数本身的引用,并在需要其值时调用它,而另一种方法立即调用函数并仅存储结果以供以后检索。
答案 2 :(得分:0)
在第一种情况下,使用this.c = a
,您将this.c
设置为函数的“指针”,然后使用d.c()
调用该函数。
答案 3 :(得分:0)
虽然这里有足够正确的答案,但我会展示一个有趣的结果:
var counter = 1
function a() {
return counter++
}
function b() {
this.c = a; // your example 1
this.e = a(); // your example 2
}
var d = new b();
//a() was evaluated once, result put in e
alert(d.e); // 1
alert(d.e); // 1
alert(d.e); // 1
//a() is evaluated each call:
alert(d.c()); // 2
alert(d.c()); // 3
alert(d.c()); // 4