this question पर अद्भुत प्रतिक्रियाओं के लिए धन्यवाद, मैं समझता हूं कि वर्गार्ग के साथ जावास्क्रिप्ट कार्यों को कैसे कॉल करें।जावास्क्रिप्ट कन्स्ट्रक्टर पर लागू होता है, "खराब प्रारूपित पैरामीटर" फेंकने
अब मैं उपयोग करने के लिए मैं कुछ रोचक जानकारी on this post पाया एक निर्माता
के साथ लागू देख रहा हूँ।
लेकिन मेरे कोड त्रुटियों
फेंक रहा है प्रयास 1:
var mid_parser = new Parser.apply(null, mid_patterns);
त्रुटि:
TypeError: Function.prototype.apply called on incompatible [object Object]
प्रयास 2: प्रयास 1:
var mid_parser = new Parser.prototype.apply(null, mid_patterns);
त्रुटि:
TypeError: Function.prototype.apply called on incompatible [object Object]
प्रयास 2:
function Parser()
{
this.comparemanager = new CompareManager(arguments);
}
mid_patterns = [objA,objB,objC]
var mid_parser = new Parser();
Parser.constructor.apply(mid_parser, mid_patterns);
त्रुटि:
syntax_model.js:91: SyntaxError: malformed formal parameter
प्रयास 3:
var mid_parser = Parser.apply(null, mid_patterns);
त्रुटि:
TypeError: this.init is undefined // init is a function of Parser.prototype
मैं समय से किया जा रहा के लिए एक समाधान है:
function Parser()
{
if(arguments.length) this.init.call(this,arguments); // call init only if arguments
}
Parser.prototype = {
//...
init: function()
{
this.comparemanager = new CompareManager(arguments);
}
//...
}
var normal parser = new Parser(objA,objB,objC);
mid_patterns = [objA,objB,objC]
var dyn_parser = new Parser();
dyn_parser.init.apply(dyn_parser, mid_patterns);
इस बहुत अच्छी तरह से काम करता है, लेकिन यह साफ है और सार्वभौमिक रूप में मैं चाहता हूँ नहीं है।
जावास्क्रिप्ट में varargs के साथ एक कन्स्ट्रक्टर को कॉल करना संभव है?
+1, शानदार धन्यवाद –
बहुत रोचक। मैंने इस के साथ थोड़ा सा खेला है और यह कुछ मामलों में * बहुत अच्छी तरह से काम करता है *। सभी रचनाकार इस दृष्टिकोण का समर्थन नहीं करते हैं। 'दिनांक', उदाहरण के लिए:' var date = new date; Date.call (तिथि, 1 9 84, 3, 26) '। – davidchambers
फ़ंक्शन.प्ली (नया फ़ंक्शन(), arg) /* एक लाइन समाधान है */ – TERMtm