1

我对 Javascript 编程比较陌生。我正在研究一个示例,并且在从 HTML 中调用对象上的方法时遇到了困难。我怀疑这与方法的范围界定或外部化有关,但我不确定。

索引.html:

<script type="text/javascript">
var f = new Fred();
f.bar();
f.foo();
</script>

弗雷德.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()无效。

4

2 回答 2

2

是的,你是对的,这确实与范围界定和闭包的概念有关。foo()如果您熟悉其他面向对象的语言(如 Java 或 C#),则可以将该函数视为“私有”方法。它仅在您的Fred()对象范围内可用。该bar()函数是“公共的”,因为使用 this.bar 声明它会将其添加到Fred()对象的公开可用属性中。所以,也要foo()“公开”,然后将其声明为:

this.foo = function () {
    if (a == 1) {
        a++;
    } 
    var e = 0;
}

有关 javaScript 中闭包的更深入解释,请尝试以下链接:http ://www.sitepoint.com/javascript-closures-demystified/

于 2013-03-01T16:12:25.707 回答
1

您没有将函数指针分配给 foo。将其更改为

this.foo = function() {
    if (a == 1) {
        a++;
    } 
    var e = 0;
};

就像你所做的那样:

this.bar = function () {
    var a = 3;
    var b = 4;
};
于 2013-03-01T16:06:48.190 回答