1

私は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()機能しません。

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 に答える