jQuery

2013-02-02 20 views
8
jQuery के साथ

लेखन प्लगइन के बिना ही एक जावास्क्रिप्ट प्लगइन लिखने के लिए कैसे अपेक्षाकृत आसान है, सिर्फ $ .fn का उपयोग करें और आप अपने रास्ते पर होंगे। इसलिए जैसा:jQuery

$.fn.analyse = function() { 
... 
} 

लेकिन क्या होगा अगर आप jQuery का उपयोग नहीं कर पा रहे? लेकिन

Object.prototype.analyse = function() { 
... 
} 

मैं क्या समझ इस पर सिकोड़ी है से:

document.querySelector("#mydiv").analyse(); 

मैं इस तरह से इसके बारे में जा सकते हैं:

चलो कहते हैं कि मैं निम्नलिखित कोड का उपयोग करने में सक्षम होना चाहते हैं!

var proto_methods = { 
    analyse: function() { 
     var node = this.node; 

     // ... 
    } 
}, wrap, _wrap; 

_wrap = function(selector) { this.node = document.querySelector(selector); }; 
_wrap.prototype = proto_methods; 

wrap = function(selector) { 
    return new _wrap(selector); 
}; 

इस तरह इसका इस्तेमाल:

+1

फिर आप केवल एक फ़ंक्शन लिखते हैं जो एक DOM तत्व स्वीकार करता है। –

+0

आपका प्रश्न वास्तव में क्या है? आप एक ऑब्जेक्ट प्रकार बना सकते हैं जो jQuery को प्रतिस्थापित करता है और उसे संशोधित करता है - आपको अनुमान लगाने के लिए आपको केवल कुछ नलसाजी की आवश्यकता होगी। – Hogan

+0

@Hogan देर से उत्तर के लिए खेद है। सवाल यह है कि यदि ऑब्जेक्ट की कार्यक्षमता को विस्तारित करने का पसंदीदा तरीका क्या है, तो 'Object.prototype.extension' पर फेंक दिया गया है? –

उत्तर

26

आपके प्रारंभ करने के लिए कुछ है

wrap("#mydiv").analyse(); 

उपयोग इस आप अधिक प्लग इन जोड़ना चाहते हैं (और यह एक छोटे से अधिक वस्तु उन्मुख):

var pack = { 
    binder: [{}] 
}; 

pack.query_bind = function(bound) { 
    if (bound) pack.binder[1] = bound; 
}; 

pack.fn = function(attributes) { 
    for (var i in attributes) pack.binder[0][i] = attributes[i]; 
}; 

var _wrap = function(selector) { 
    this.node = /^(#|.)\w+/.test(selector) ? pack.binder[1](selector) : {}; 
}; 

_wrap.prototype = pack.binder[0]; 

var wrap = function(selector) { 
    pack.query_bind(document.querySelector.bind(document)); 
    return new _wrap(selector); 
}; 

wrap.fn = pack.fn; 

wrap.fn({ 
    cool: function() {}, 
    nice: function() {} 
}); 

wrap('#mydiv').cool(); 

आप किसी भी समय wrap.fn कॉल कर सकते हैं और प्रोटोटाइप अद्यतन किया जाएगा।

हालांकि, ध्यान दें कि यह jQuery के लिए एक वास्तविक प्रतिस्थापन नहीं है क्योंकि ऐसी कई चीजें हैं जिन्हें मैंने इस कोड में शामिल नहीं किया है। wrap फ़ंक्शन jQuery के $ के रूप में कई तरीकों से उन्नत और उपयोगी नहीं है।

मुझे आशा है कि इस मदद करता है।

+1

धन्यवाद ... यह मुझे एक बहुत मदद की है .. इस में विकल्प कैसे सेट करें? –

+2

क्या आप प्रत्येक अनुभाग पर टिप्पणी करने की देखभाल करेंगे, यह बताते हुए कि आपने इसे ऐसा करने का तरीका क्यों चुना है? अभी यह कोड का एक डंप है, कार्यों को एक दूसरे को बुलाकर और उदाहरण बनाते हैं। यह बहुत आत्म-व्याख्यात्मक नहीं है – vsync

2

बस बॉयलरप्लेट लिखा था। इसका कोई भी चयनकर्ता तर्क नहीं है क्योंकि यह D3.js के शीर्ष पर लाइब्रेरी के लिए डिज़ाइन किया गया है, जिसका पहले से ही स्वयं का चयनकर्ता इंजन है। https://gist.github.com/turboMaCk/34bde8e744f5921be0c4