Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

array.splice = what does it means?

I would like to understand the meaning of that code fragment. "saveTo" is a array, the programmer assigned a function() to the splice method. I don't understand what does it mean. Is that a override? What is the meaning of the return argument?, and why the function takes no argument while splice requires 2 or more arguments?

    saveTo.splice = function() {
        if (saveTo.length == 1) {
            $("#send").prop("disabled", true);
        }
        return Array.prototype.splice.apply(this, arguments);
    };
like image 957
nellowl Avatar asked Dec 14 '22 11:12

nellowl


1 Answers

Javascript lets you re-assign methods at runtime. In this case, what the programmer was doing is reassigning splice on this specific instance of an array in order to call a jQuery method. Beyond that, it works in exactly the same way as the existing splice as they are calling return Array.prototype.splice.apply(this, arguments); - meaning that this method just passes on whatever arguments are passed to it.

Here's a demo:

var myArray = [1,2,3,4];
console.log("Splice before re-assing: ", myArray.splice(1,1));

// reset it.
myArray = [1,2,3,4];
myArray.splice = function(){
    console.log("From inside new splice function");
    
    return Array.prototype.splice.apply(this, arguments);
}


console.log("Splice after re-assiging: ", myArray.splice(1,1));

Whether this is a good thing to do is debatable. It breaks a few principles of programming.

like image 197
Jamiec Avatar answered Dec 17 '22 22:12

Jamiec