我对Javascript编程比较陌生。我正在研究一个例子,我很难从HTML调用对象的方法。我怀疑这与方法的范围或外部化有关,但我不确定。
的index.html:
<script type="text/javascript">
var f = new Fred();
f.bar();
f.foo();
</script>
Fred.js:
function Fred() {
this.a = 1;
function foo() {
if (a == 1) {
a++;
}
var e = 0;
}
this.bar = function () {
var a = 3;
var b = 4;
};
this.c = 3;
this.d = 4;
}
对bar()
的调用有效,对foo()
的调用不起作用。
答案 0 :(得分:2)
是的,你是对的,这确实与范围和闭包的概念有关。如果您熟悉其他面向对象的语言(如Java或C#),则可以将foo()
函数视为“私有”方法。它仅在Fred()
对象的范围内可用。 bar()
函数在某种意义上是“公共”的,使用this.bar将其添加到Fred()
对象的公共属性中。因此,要使foo()
“公开”,请将其声明为:
this.foo = function () {
if (a == 1) {
a++;
}
var e = 0;
}
有关javaScript中闭包的更深入说明,请尝试以下链接:http://www.sitepoint.com/javascript-closures-demystified/
答案 1 :(得分:1)
你没有为foo分配function pointer。将其更改为
this.foo = function() {
if (a == 1) {
a++;
}
var e = 0;
};
像你做的那样:
this.bar = function () {
var a = 3;
var b = 4;
};