2011-12-15 15 views
0

は一例ですが、効果的に私は何を達成しようとしていることは、変数ではなく通話を続行するために使用することができるということですオブジェクト 'contactForm'自体を参照するよりも。また、jQueryをクリックするなどのイベントでこれを自動的に渡すため、これよりも少し安全です。Javascriptのオブジェクトの受け渡し

+0

あなたはhttp://api.jquery.com/jQuery.extend/をお探しですか? –

答えて

1

2つのもの。あなたが期待するよう

  1. あなたthatは、作成したthisことのContactFormにない実際のContactFormを指しています。
  2. thatはお問い合わせフォームの所有物であり、this.thatまたはcontactForm.thatでアクセスする必要がありますが、そのような種類のものは本来の目的を破ります。

次のいずれかの

  1. リファレンスのContactForm自体
  2. またはすべてあなたがしたい場合は

    init: function(){ 
        var that = this; 
        that.lilalert(); 
    } 
    

それを必要とする関数の内部that Sを定義しますdoはavですOID thisペテン、代替はクロージャを使用して(したがって、thisを経由して結合の代わりにダイナミックの字句、静的スコープ)さ

function make_contact_form(){ 
    var lilfield: 'I just equal this'; 
    var fields = ["hc_name","hc_email","hc_telephone"]; //dont use new Array. its evil 
    var submit_button = jQuery("#hc_submit"); 
    var init = function(){ 
     lilAlert(); //lilAlert is a name is scope. call it directly 
    }; 
    var lilAlert = function(){ 
     alert("lets pump this out"); 
    }; 

    return { 
     lilfield: lilfield, 
     fields: fields, 
     submit_button: submit_button, 
     init: init, 
     lilAlert: lilAlert 
    }; 
} 
+0

実際、私がしようとしていることはできません。どうすればいいですか?そして巧妙な仕事はありませんか? – David

+0

@David:私はworkaroudを含んでいましたが、それほど巧妙ではありません。 – hugomg

0

あなたはそれを複雑にしています。 this.lilAlert()と電話をかけてください。init()とし、contactFormを呼び出している限り、正常に動作します。

contactForm.init(); // this will work; 

setTimeout(contactForm.init, 1000); // this won't work, as `init()` will have `this` set to `window` 
setTimeout(function() { // This approach will work though. 
    contactForm.init(); 
}, 1000); 
+0

それはその意味でうまくいきます。しかし、例えば私がこれを作ると言うと、 clickAction:function(){ this.lilAlert(); } jQueryバインドから次のように呼び出します。 jQuery( "#element")。bind( 'click'、contactForm.clickAction); これは、オブジェクトスコープから参照されたときにオブジェクトではなくクリックされた要素になるため、問題が発生します。 @David; – David

+0

;あなたがする必要があるのは、 'setTimeout'の例のように無名関数でラップすることだけです。 – Matt

関連する問題