কীভাবে একটি জাভাস্ক্রিপ্ট ফাংশন ওভাররাইড করবেন


109

আমি জাভাস্ক্রিপ্টে একটি বিল্ট ইন parseFloatফাংশন ওভাররাইড করার চেষ্টা করছি ।

আমি কীভাবে এটি করতে যাব?


9
আমি এটা করার সুপারিশ করব না। প্রোটোটাইপ মধ্যে সম্ভবত অন্য ফাংশন তৈরি?
— কেজেওয়াই নাম 葉家仁

আপনি ঠিক করতে পারেন function parseFloat() {}, তবে যতদূর আমি জানি না আসলে নেটিভ সংস্করণটি কল করার কোনও উপায় নেই।
— pimvdb

ওভাররাইডিং ফাংশন খুব সাধারণ অনুশীলন।
— জেরি লিয়াং

উত্তর:


231
var origParseFloat = parseFloat;
parseFloat = function(str) {
     alert("And I'm in your floats!");
     return origParseFloat(str);
}

কাস্টমসের অভ্যন্তরে নেটিভ সংস্করণটি কল করাও কি সম্ভব parseFloat? আমি এটি চেষ্টা করেছিলাম তবে এটি 'সর্বাধিক কল স্ট্যাকের আকার ছাড়িয়ে গেছে': jsfiddle.net/huZG2 এ ত্রুটি করেছে । ধন্যবাদ।
— pimvdb

1
আপনার স্ট্রিং নষ্ট হয়েছে :)
— মার্সেলো

2
@ ডেভিড ওয়াটারস: ক্রোমে আপনার বর্তমান কোড সতর্কতাগুলি আমি চিরকালই ভীত।
— pimvdb

11
@ ডেভিড মনে রাখবেন যে ফাংশনটি উত্তোলন করা হয়, যার অর্থ origParseFloatআপনি ঠিক পরে ঘোষণা করেছেন যে ফাংশনটির দিকে নির্দেশ করে। এটি কাজ করবে।
— HoLyVieR

1
@HoLyVieR ধন্যবাদ নাম উত্তর আপডেট ফাংশন বরাদ্দ করে ফিক্সড দেখতে jsfiddle.net/huZG2/6
— ডেভিড ওয়াটার্স

45

আপনি যে কোনও বিল্ট-ইন ফাংশনটিকে কেবল পুনঃ-ঘোষণা দিয়ে ওভাররাইড করতে পারেন।

parseFloat = function(a){
  alert(a)
};

এখন parseFloat(3)3 সতর্কতা হবে।


তবে এই উত্তরে ফাংশনকে ওভাররাইড করার কোনও ধারণা নেই, অর্থাত্ ওভাররাইড কার্যকারিতা কিন্তু ফাংশনটির নাম একই রাখে।
— আহসান

18

আপনি এটিকে ওভাররাইড করতে পারেন বা পছন্দনীয়ভাবে এর বাস্তবায়নটি এভাবে প্রসারিত করতে পারেন

parseFloat = (function(_super) {
    return function() {
        // Extend it to log the value for example that is passed
        console.log(arguments[0]);
        // Or override it by always subtracting 1 for example
        arguments[0] = arguments[0] - 1;
        return _super.apply(this, arguments);
    };         

})(parseFloat);

আপনি এটিকে যেমন কল করবেন ঠিক তেমন কল করুন:

var result = parseFloat(1.345); // It should log the value 1.345 but get the value 0.345

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.