2010-01-24 10 views
15

प्रोटोटाइप लाइब्रेरी का उपयोग किये बिना सभी जावास्क्रिप्ट कार्यों में कोई तरीका जोड़ने का कोई तरीका है?जावास्क्रिप्ट सभी कार्यों के लिए प्रोटोटाइप विधि जोड़ें?

की तर्ज पर

कुछ:

Function.prototype.methodName = function(){ 


    return dowhateverto(this) 

}; 

इस मैं अब तक की कोशिश की, लेकिन यह काम नहीं किया है। शायद यह एक बुरा विचार भी है यदि आप कृपया मुझे बता सकते हैं क्यों?

यदि ऐसा है तो मैं कार्यों का एक सेट में जोड़ सकते हैं मैं चुनें

कुछ की तरह:

MyFunctions.prototype.methodName = function(){ 


    return dowhateverto(this) 

}; 

जहां MyFunctions फ़ंक्शन नाम की एक सरणी है

आप

+0

http://www.packtpub.com/article/using-prototype-property-in-javascript – jjj

+1

विस्तारित जावास्क्रिप्ट ऑब्जेक्ट्स का विस्तार करना खराब अभ्यास है। – jerone

उत्तर

25

निश्चित रूप से। कार्य वस्तुओं रहे हैं:

var foo = function() {}; 

Function.prototype.bar = function() { 
    alert("bar"); 
}; 

foo.bar(); 

सूचित करेंगे "बार"

+0

यह कोड स्निपेट मानता है कि 'foo' पहले घोषित किया गया है, या अन्यथा' foo' एक अंतर्निहित वैश्विक (खराब!) है। शायद घोषणा अभ्यास को 'var foo = function() {};' अच्छे अभ्यास को मजबूत करने के लिए बदलें ...? –

+0

ठीक है, पहली जगह मूल वस्तुओं के प्रोटोटाइप को संशोधित करने के लिए यह बिल्कुल अच्छी शैली नहीं है। लेकिन मैं सहमत हूं। – troelskn

1
function one(){ 
    alert(1); 
} 
function two(){ 
    alert(2); 
} 

var myFunctionNames = ["one", "two"]; 

for(var i=0; i<myFunctionNames.length; i++) { 
    // reference the window object, 
    // since the functions 'one' and 'two are in global scope 
    Function.prototype[myFunctionNames[i]] = window[myFunctionNames[i]]; 
} 


function foo(){} 

foo.two(); // will alert 2 
धन्यवाद
1

बदलने जे एस में निर्मित वस्तुओं आप कुछ आश्चर्य दे सकते हैं।
यदि आप बाहरी पुस्तकालय जोड़ते हैं या उनमें से किसी एक के संस्करण को बदलते हैं, तो आप कभी भी सुनिश्चित नहीं हैं कि वे आपके एक्सटेंशन को ओवरराइट नहीं करेंगे।

+0

आपका लिंक मर चुका है। – luckydonald

+0

@ लकीडोनाल्ड, टिप्पणी के लिए धन्यवाद – Mic

1

Object.prototype बजाय का प्रयास करें:

Object.prototype.methodName = function(){ 

    return dowhateverto(this) 
}; 

लेकिन यह भी चेतावनी है कि देशी वस्तुओं का विस्तार हमेशा एक अच्छा विचार नहीं है ध्यान।

फ़ंक्शन.प्रोटोटाइप वास्तव में जावास्क्रिप्ट में विश्वसनीय रूप से छेड़छाड़ नहीं किया जा सकता है; यह वास्तविक वस्तु नहीं है, क्योंकि फ़ंक्शन() कन्स्ट्रक्टर को किसी ऑब्जेक्ट को फ़ंक्शन वापस करने की आवश्यकता नहीं होती है। लेकिन, आप इसे सामान्य कार्य की तरह नहीं मान सकते हैं। जब आप अपने 'गुण' तक पहुंचने का प्रयास करते हैं तो इसका व्यवहार अनिर्धारित हो सकता है और ब्राउज़र के बीच भिन्न हो सकता है। this question भी देखें।

संबंधित मुद्दे