2016-07-25 4 views
1

内部の機能の範囲、私は問題を抱えているが失われた私は、スコープを維持するために行うことができますとおり、イベント$(window).resizeがオブジェクト

内で実行されたときに、私は、オブジェクトANAのプロパティへの参照を失っています。

例:

var testObject = { 

     init: function() { 
      this.divOriginal = $('.selector-tag');    
      this.resizeNow(); 
     }, 

     resizeNow: function() { 
      //some another code here.... 
      //.... 
      //.. 
      $(window).resize(this.resizeUpdate.bind(this)); //without bind(this) the scope is window    
     }, 

     resizeUpdate: function() { 
      console.log($(this)); 
      var scrollWrapper = $(this)[0].divOriginal;//the only way to refer to the divOriginal 
      scrollWrapper.css('border','1px solid red'); 
     } 
} 

testObject.init(); 

オブジェクトの属性にアクセスするためのクリーンな方法はありますか?

+0

プロパティへの参照が失われているコードを正確に説明し、コードの呼び出し方法を教えてください。関数内の 'this 'の値は、関数がどのように呼び出されるかによって決まります。だから、どこを紛失しているのか、それがどのように呼び出されているのかを正確に知る必要があるので、修正方法の具体的な提案をすることができます。 – jfriend00

答えて

1

$(this)ではなく、thisを使用してオブジェクトにアクセスできます。これは、オブジェクトをイベントハンドラから呼び出されたメソッドにバインドしているためです。

は)(Function.prototype.bindでMDN docsを参照してください:

バインド()メソッドは、と、呼び出されたときに、与えられた値に設定された このキーワードを持って、新しい関数を作成します新しい関数が呼び出されたときに指定されたいずれかの先行する引数の の指定されたシーケンス。

+0

それはコメントに入れる必要があります。 –

+0

あなたは正しいです、時には最も単純なことは私たちが最も望ましくないものです。このパスでどれくらいの時間があるか分かりません。ありがとうございます。 – chalo

+0

ようこそ。私は答えをより多くの説明で更新しました。 –