के विचार करें मैं निम्नलिखित कोडरैपिंग कार्य करता है और function.length
/*...*/
var _fun = fun;
fun = function() {
/*...*/
_fun.apply(this, arguments);
}
है मैं सिर्फ _fun
पर .length
डेटा खो दिया है क्योंकि मैं कुछ अवरोधन तर्क के साथ लपेट करने की कोशिश की हैं। इस प्रकार
Object.defineProperty(fun, "length", {
value: /*...*/,
writable: false,
configurable: false,
enumerable: false
}
यह देखते हुए कि fun
अंदर तर्क .length
की आवश्यकता है सही होने की
निम्नलिखित
var f = function(a,b) { };
console.log(f.length); // 2
f.length = 4;
console.log(f.length); // 2
काम नहीं करता है .length
परिभाषित किया गया है annotated ES5.1 specification states कि, मैं कैसे रोकना और अधिलेखित कर सकते हैं .length
डेटा को नष्ट किए बिना यह कार्य?
मुझे एहसास है कि मुझे eval
और डोडी Function.prototype.toString
का उपयोग करने की आवश्यकता होगी ताकि तर्कों की एक ही संख्या के साथ एक नई स्ट्रिंग का निर्माण किया जा सके। मैं इससे बचना चाहता हूं।
आपको वास्तव में ठीक से सेट करने के लिए 'लंबाई' की आवश्यकता है? आप https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind पर एक नज़र डालना चाहते हैं, कई पुस्तकालय भी इस व्यवहार को अनुकरण करते हैं। – Prusse
@Prusse मेरी समस्या को ठीक करने के लिए बाध्य कैसे है? – Raynos
केवल एक सुझाव, स्पष्ट रूप से आपके उद्देश्य को समझ नहीं सकता, क्षमा करें। – Prusse