में जेरेमी एशकेनास की भयानक Underscore.js लाइब्रेरी में उपयोग और लागू करने के लिए, मैंने स्रोत फ़ाइल के बारे में एक चीज़ को समझने की कोशिश की। मुझे यह समझ नहीं है:अंडरस्कोर.जेएस स्रोत को समझने की कोशिश कर रहा है - लाइब्रेरी
var slice = Array.prototype.slice;
args = slice.call(arguments, 2);
ताकि:
args = Array.prototype.slice.call(arguments, 2);
.call
या .apply
कार्यों के तरीके हैं। लेकिन यहां, .call
पर कौन से फ़ंक्शन हैं? पहला पैरामीटर संदर्भ होना चाहिए, लेकिन arguments
संदर्भ है? दूसरे पैरामीटर कार्यों में पास करने के लिए पैरा होना चाहिए। यहां वे संख्या 2
हैं। इसका क्या मतलब है? कभी-कभी लाइब्रेरी में, यह 1
या 0
का उपयोग करता है। क्या वे कार्यों में पारित होने के लिए पैरा की संख्या हैं?
_.bind = function bind(func, context) {
var bound, args;
if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
if (!_.isFunction(func)) throw new TypeError;
args = slice.call(arguments, 2);
return bound = function() {
if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));
ctor.prototype = func.prototype;
var self = new ctor;
var result = func.apply(self, args.concat(slice.call(arguments)));
if (Object(result) === result) return result;
return self;
};
};
प्रश्न 2: मैं काफी इस समारोह के तर्क समझ में नहीं आता। समझने में मदद की ज़रूरत है। एक उदाहरण बहुत उपयोगी होना चाहिए।
// Invoke a method (with arguments) on every item in a collection.
_.invoke = function(obj, method) {
var args = slice.call(arguments, 2);
return _.map(obj, function(value) {
return (method.call ? method || value : value[method]).apply(value, args);
});
};
सहायता के लिए धन्यवाद।
'myArray.slice (1) === slice.call (myArray, 1)' – Raynos
हाँ कि एक महान, सरल संबंध दिखाने के लिए रास्ता नहीं है। – Pointy
@ रेनोस, यह वास्तव में झूठा है। 'टुकड़ा' दो अलग-अलग सरणी वस्तुएं बनाता है, जो समान नहीं हैं। – katspaugh