2009-06-25 5 views
7

में 'इस' के संदर्भ रख सकते मैं कुछ इस तरह है:मैं कैसे jQuery

var Something = function(){ 
    this.render = function(){}; 
    $(window).resize(function(){ 
    this.render(); 
    }); 
} 

दिक्कत यह है कि अज्ञात फ़ंक्शन के अंदर 'इसी' विंडो वस्तु को संदर्भित करता है। मुझे पता है कि मैं कुछ ऐसा कर सकता था:

var Something = function(){ 
    this.render = function(){}; 
    var tempThis = this; 
    $(window).resize(function(){ 
    tempThis.render(); 
    }); 
} 

लेकिन क्या कोई बेहतर तरीका है? यह बहुत सुरुचिपूर्ण नहीं दिखता है।

+1

उचित दायरे को सुनिश्चित करने के लिए आपको "tempThis = this" से पहले "var" रखना चाहिए। – Matt

उत्तर

14

आपके द्वारा प्राप्त समाधान सबसे अधिक लोगों का उपयोग होता है। आम सम्मेलन आपके temp को कॉल करना है यह चर "वह।"

var Something = function(){ 
    this.render = function(){}; 
    var that = this; 
    $(window).resize(function(){ 
    that.render(); 
    }); 
}; 
+3

उस के लिए +1 ( – peirix

+0

अच्छी तरह से एक सम्मेलन होने से यह और अधिक सुरुचिपूर्ण लग रहा है :) मुझे "वह" पसंद है। – disc0dancer

+0

+1 इसके लिए = यह -> यह सबसे सुरुचिपूर्ण तरीका है जिसे मैंने कभी भी इस प्रश्न के लिए पाया है। – Nordin

2

यह आपके सबसे अच्छे विकल्प की तरह दिखता है, मुझे नहीं लगता कि एक बेहतर तरीका है। (अगर मैं गलत हूं तो कोई मुझे सही करेगा)।

+0

+1 सेकेंड किया गया। – jrharshath

0

मैं इसे कई तंग परिस्थितियों में कर रहा हूं। यह सुरुचिपूर्ण नहीं दिखता है, लेकिन यह कभी विफल नहीं होता है। दरअसल कार्रवाई में जावास्क्रिप्ट बंद हो जाता है।

jrh

1

FYI करें यह नियंत्रित करने की क्षमता है कि मैं वास्तव में क्या करना next version of JQuery

0

में आ रहा है। यह jQuery के लिए विशिष्ट नहीं है, या तो।

var Construct = function() { 
    var self = this; //preserve scope 

    this.materials = 2000; 

    this.build = function(){ 
     self.materials -= 100; 
    }; 
}; 

अपने नए स्कोप चर के सामने विभिन्न कीवर्ड का उपयोग करना याद रखें। अन्यथा, आप एक नया वैश्विक चर बना रहे हैं। एक स्थानीय चर के रूप में, यह अभी भी एक बंद के माध्यम से आंतरिक समारोह के भीतर सुलभ होगा।

0

कम से कम चर रखने के लिए सबसे अच्छा समाधान Function.prototype.bind() विधि का उपयोग करना होगा।

var Something = function(){ 
    this.render = function(){}; 
    $(window).resize(this.render.bind(this)); 
} 

इस पद्धति है कि भविष्य जटिलताओं के कारण हो सकता है, जिसका अर्थ आप इसे किफ़ायत से उपयोग करने के लिए चुनना चाहिए के साथ समस्या यह है, जब आप $(this) आह्वान करने के लिए तत्व को आकर्षित करने की जरूरत है। इसलिए, मैं सुझाव दे सकता हूं कि आपके आकार बदलने की विधि में Function.prototype.bind() का उपयोग करना उचित होगा, लेकिन क्लिक क्लिक में इसे उपयोग करने के लिए इसे एक अच्छा समाधान नहीं होगा जिसे आपको सीधे क्लिक किए गए तत्व को लक्षित करने की आवश्यकता हो सकती है।

यह एक उदाहरण उदाहरण के लिए JSFiddle देखें।

अधिक जानकारी

अन्य तरीकों प्रयोग करने योग्य हैं के लिए Mozilla Documentation on Function.prototype.bind() देखें, लेकिन एक चर बनाने इस के संदर्भ बनाए रखने के लिए अपने प्रश्न के अनुसार अवांछित प्रभाव है।