JavaScript Method overloading

533388

Hectopat
Katılım
27 Mart 2022
Mesajlar
4.463
Makaleler
2
Çözümler
54
Bu method overloading olmuyor mu?

JavaScript:
function foo(){
 console.log("Merhaba");
}

function foo(){
 console.log("Tekrardan merhaba");
}

foo();
 
Sanırım evet.

Ya da foo() parantez kısmının içine parametre yazılınca oluyor olabilir. @533388
 

Peki ustte yazdigim da oyle olur mu?

Evet hatta ilk functona tek ikinci functiona iki parametre gecip tek parametreli bir obje olusturunca 2. yi vermedigimiz icin 2. ye undefined diyordu.

@566156 Function Overloading in JavaScript - GeeksforGeeks
 
Vanilla js'de overloading yok. Overload etmeye çalıştığın şey, diğerini override eder. Örnek;
JavaScript:
function foo(param) {
    console.log("first overload, param is: " + param);
}

function foo(param1, param2) {
    console.log("second overload, param1 is: " + param1 + " param2 is: " + param2);
}

foo("test"); //output "second overload, param 1 is: test param2 is: undefined"


Overload benzeri bir etki için şunu deneyebilirsin;
JavaScript:
class Main {
    foo() {
        var one_parameter = function (arg1) {
            console.log("1 parameter: " + arg1)
        }

        var two_parameter = function (arg1, arg2) {
            console.log("1. parameter: " + arg1 + " 2. parameter: " + arg2)
        }

        var two_param_opts = function (arg1, arg2, opts) {
            console.log("1. parameter: " + arg1 + " 2. parameter: " + arg2)
            if(opts["test"]) {
                console.log("option test given, " + opts["test"] );
            }
        }

        switch(arguments.length) {
            case 1:
                return arguments[0] != undefined ? one_parameter(arguments[0]) :  null;
            case 2:
                return two_parameter(arguments[0], arguments[1]);
            case 3:
                return two_param_opts(arguments[0], arguments[1], arguments[2]);
            default:
                return null;
        }
    }
}

obj = new Main();

obj.foo("test"); //output "1 parameter: test"
obj.foo("test", "test1"); //output "1. parameter: test 2. parameter: test1"
obj.foo("test", "test", {"test":"item"}); //output "1. parameter: test 2. parameter test
                                          //        option test given, item"

Gibi gibi.
 

Peki daha kisa bir yazim sekli yok mu?
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…