2012-03-20 7 views
2
function Cons(name) { 
var pvar1="hi "+name; 
sayhi = function() { 
    alert(pvar1); 
} 
attEvents(){ 
$('#'+name).bind("click",sayhi); 
} 
} 
var a = new Cons('name1'); 
var b = new Cons('name2'); 
var c = new Cons('name3'); 

名前1、名前2、名前3はすべてdivです。今、どんなdivをクリックしても、私はいつも "hi name3"を得ています。プライベート変数は、クリックされたdivに関係なく、最後に格納された値を持っています。どんな助けもありがとうございます。javascriptでプライベートメソッドによってアクセスされるプライベート変数

おかげであなたはそれがグローバルとして定義されてvarキーワードを指定せずに、それを定義した場合

+0

おそらく 'sayhi'がグローバルで、' .bind( "click"、sayhi); 'が、3つのオブジェクトが作成された後にしばらく呼ばれるからです。しかし、あなたはこのステートメントを修正/明確にしなければならないことを確かめるために: 'attEvents(){$( '#' + name} .bind(" click "、sayhi);}'それは何ですか? –

+0

私の間違いですが、attEventsはdivにイベントを添付します。それはCons()の終わりに呼び出されます。はい、sayhiはグローバルスコープにありました。助けてくれてありがとう。関数が定義されていてもvarを使うべきかどうかは分かりませんでした。どうもありがとう :) –

答えて

2
sayhi = function() { 
    alert(pvar1); 
} 

。したがって、sayhiは最後のものとして定義された関数を指します。

var sayhi = function() { 
    alert(pvar1); 
} 

または

var pvar1 = "hi "+name, 
    sayhi = function() { 
     alert(pvar1); 
    }; 

注カンマを使用してください。またはtrue jQueryのスタイル

$('#'+name).bind("click", function() { 
    alert(pvar1); 
}); 
関連する問題