0
var f = function() {
   this.m = '10' ; 
   f1 = function(){
        alert(m)
    }
}

o = new f()
o.m

f1()

これは、上記の例からネストされた関数 f1 を呼び出す正しい方法ですか?

4

2 に答える 2

5

f1のメソッドになりたいと想定していますf。その場合は、プロパティとして追加する必要があります( で行ったようにm):

var f = function() {
   this.m = '10'; 
   this.f1 = function(){
       alert(this.m); //Notice that this has changed to `this.m`
   };
}; //Function expressions should be terminated with a semicolon

次に、のインスタンスでメソッドを呼び出すことができますf

o = new f();
o.f1(); //Alerts '10'

これが実際のです。

現在の方法ではf1、グローバルスコープに漏れることになります(varステートメントなしで宣言されているため)。


補足: 通常は、メソッドを のプロパティにすることをお勧めしますprototype。これにより、各インスタンスのコピーではなく、メモリ内の関数の単一のコピーが作成されます。

var f = function() {
   this.m = '10';
};

f.prototype.f1 = function() {
    alert(this.m);  
};
于 2012-07-04T08:12:59.963 に答える
2

コードでは、関数は内部関数であり、外部から呼び出すことはできません。コンストラクター内で呼び出す場合は、オブジェクトに f1 を割り当てる必要があります。

this.f1 = function() {
  alert(m);
}

次に、次のように呼び出すことができます。

o = new f()
o.f1() //=> alerts 10
于 2012-07-04T08:13:36.683 に答える