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


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.