वर्ग के सदस्यों के लिए एक PrototypeJS कक्षा पहुँच के एक वर्ग विधि के भीतर एक समारोह देते

वोट
2

मान लीजिए कि मैं एक बहुत ही सरल PrototypeJS वर्ग है कि इस तरह दिखता है करते हैं:

var Foo = Class.create({
  initialize:  function() {
    this.bar = 'bar';
  },

  dostuff:  function() {
    $$('.enabled').each( function(elem) {
      alert(this.bar);  //FAIL
    });
  }
});

यह विफल रहता है, क्योंकि कार्य करने के लिए पारित किया जा रहा .प्रत्येक () किसी भी विचार क्या नहीं है इस को दर्शाता है।

मैं कैसे उपयोग कर सकते हैं बार है कि समारोह के अंदर से कक्षा की विशेषता?

07/07/2009 को 21:48
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


4 जवाब

वोट
2

प्रयत्न:

dostuff:  function() {
   var that = this;

   $$('.enabled').each( function(elem) {
        alert(that.bar);  //FTW
   });
}

या, के लिए एक संदर्भ पारित each():

dostuff:  function() {
   $$('.enabled').each( function(elem) {
        alert(this.bar);  //FTW
   }, this); // Context
}
07/07/2009 को 21:55
का स्रोत उपयोगकर्ता

वोट
0

हममम, मुझे कोई Protoype विशेषज्ञ हूँ, लेकिन मैं लगता है कि यह आपके प्रश्न का उत्तर मदद कर सकता है - http://www.duncangunn.me.uk/dasblog/2009/05/26/ObjectorientedEventHandlingInJavascript.aspx

मुझे पता है अगर यह होता है, अगर यह अपना समय बर्बाद कर के लिए नहीं, क्षमा याचना करता है!

07/07/2009 को 21:55
का स्रोत उपयोगकर्ता

वोट
0

आप प्रत्येक (अंदर) होते हैं, तब यह क्या प्रत्येक के साथ दोहराया जा रहा है को दर्शाता है। वर्ग उसमें केवल एक ही होती है, तो यह सब की जगह फू के साथ है।

var Foo = Class.create({
bar : "bar",

  dostuff:  function() {
    $$('.enabled').each( function(elem) {
      alert(Foo.bar);  //FAIL
    });
  }
});

यदि आप चेतावनी (बार) के साथ भाग नहीं मिल सकता है;

07/07/2009 को 23:25
का स्रोत उपयोगकर्ता

वोट
1

आप उपयोग कर सकते हैं प्रोटोटाइप का बाँध समारोह 'एक वस्तु को ताले [समारोह] की निष्पादन गुंजाइश' है, जो।

var Foo = Class.create({
  initialize:  function() {
    this.bar = 'bar';
  },

  dostuff:  function() {
    $$('.enabled').each( function(elem) {
      alert(this.bar);
    }.bind(this)); // Set the execution scope to Foo
  }
});
07/07/2009 को 23:53
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more