2013-01-06 18 views
13

गतिशील नाम के साथ फ़ंक्शन कैसे बनाएं? कुछ ऐसा:जावास्क्रिप्ट: गतिशील फ़ंक्शन नाम

function create_function(name){ 
    new Function(name, 'console.log("hello world")'); 
} 
create_function('example'); 
example(); // --> 'hello world' 

इसके अलावा फ़ंक्शन एक फंक्शन ऑब्जेक्ट होना चाहिए ताकि मैं ऑब्जेक्ट के प्रोटोटाइप को संशोधित कर सकूं।

+0

क्या आप समझ सकते हैं कि आप किस समस्या को हल करने की कोशिश कर रहे हैं? – Philipp

+0

@ फिलिप: उदाहरण के लिए, ओपी कुछ कन्स्ट्रक्टर को किसी अन्य के साथ बदलने में रुचि रख सकता है, लेकिन इसे मूल कन्स्ट्रक्टर के समान नाम दे रहा है, इसलिए कोड समान फ़ंक्शन नाम देखता है। यह उन कारणों में से एक हो सकता है जिनका मैं सामना कर रहा हूं। लेकिन मुझे यकीन है कि कुछ भी हैं। आपके जवाब में –

उत्तर

11
window.example = function() { alert('hello world') } 
example(); 

या

name = 'example'; 
window[name] = function() { ... } 
... 

या

window[name] = new Function('alert("hello world")') 
+0

[एक पहेली जोड़ें] (http://jsfiddle.net/mE2n5/)। –

+9

मुझे नहीं पता कि गलत जवाब क्यों एक संकेत रैंक है। लेखक को रनटाइम पर नामित फ़ंक्शन की आवश्यकता होती है, न कि वैश्विक नाम पर जाना। –

+0

नीचे पोस्ट करने के लिए बेहतर तरीका है या यह एक है? –

13

मैं पिछले 3 घंटे के लिए इस के साथ प्रयोग करना किया गया है और अंत में यह कम से कम कुछ हद तक सुरुचिपूर्ण नया समारोह का उपयोग कर के रूप में पर सुझाव मिल गया अन्य धागे:

/** 
* JavaScript Rename Function 
* @author Nate Ferrero 
* @license Public Domain 
* @date Apr 5th, 2014 
*/ 
var renameFunction = function (name, fn) { 
    return (new Function("return function (call) { return function " + name + 
     "() { return call(this, arguments) }; };")())(Function.apply.bind(fn)); 
}; 

/** 
* Test Code 
*/ 
var cls = renameFunction('Book', function (title) { 
    this.title = title; 
}); 

new cls('One Flew to Kill a Mockingbird'); 

यदि आप उपरोक्त कोड चलाते हैं, तो आपको अपने कंसोल पर निम्न आउटपुट देखना चाहिए:

Book {title: "One Flew to Kill a Mockingbird"} 
संबंधित मुद्दे