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();
 
Overload olması için iki foo() fonksiyonunun farklı parametreler alması gerekiyor. Burada redeclaration yapılmış ve bu genellikle hata olarak kabul edilir. Mesela aşağıdaki gibi yaparsan overload olur.

Foo(int a)
Foo(double b)

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"
1702766529558.png


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.
1702766731911.png
 
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"
Eki Görüntüle 2055401

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.
Eki Görüntüle 2055403

Peki daha kisa bir yazim sekli yok mu?
 

Technopat Haberler

Yeni konular

Geri
Yukarı