jQuery in Action, 2nd edition*
The moose likes HTML, CSS and JavaScript and the fly likes Problem with partial functions Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Java 8 in Action this week in the Java 8 forum!
JavaRanch » Java Forums » Engineering » HTML, CSS and JavaScript
Bookmark "Problem with partial functions" Watch "Problem with partial functions" New topic
Author

Problem with partial functions

David Pantale
Ranch Hand

Joined: Mar 16, 2010
Posts: 32
There is something I don't understand about the below javascript. I executed the following code from Secrets of the Javascript Ninjas:

<!DOCTYPE html>
<html>
<head>
<title>Listing 5.12</title>
<script type="text/javascript" src="../scripts/assert.js"></script>
<link href="../styles/assert.css" rel="stylesheet" type="text/css">
</head>
<body>
<script type="text/javascript">

Function.prototype.partial = function() {
var fn = this, args = Array.prototype.slice.call(arguments);
return function() {
var arg = 0;
for (var i = 0; i < args.length && arg < arguments.length; i++) {
if (args[i] === undefined) {
args[i] = arguments[arg++];
}
}
return fn.apply(this, args);
};
};

Math.maxAbove500 = Math.max.partial(500);

assert(Math.maxAbove500(3,4,1,6) == 500, "Max of 500, 3, 4, 1, 6 is 500"); //#4
assert(Math.maxAbove500(3,4,11223,1,6) == 11223, "Max of 500, 3, 4, 11223, 1, 6 is 11223"); //#4

</script>
</body>
</html>

When it runs, the first assert works and returns true, but when the second assert runs it return false. It seems it should return true also since 11223 is the max in the array. Is there something I don't understand about this function or is there some sort of error? I'm running this in Chrome ver. 31.0.1650.57.
Sresh Rangi
Ranch Hand

Joined: Nov 28, 2012
Posts: 39
    
    1
When calling partial, then you need to add some undefined values to act as placeholders for the values you pass in later:



The function can only be called once though because it modifies args in the outer scope. To use it multiple times, you need to make a copy:



or you can define partial without requiring undefined values, then you can call it like in your original code:

 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Problem with partial functions
 
Similar Threads
Reset button
how to use json list file in javascript file to draw stacked bar chart
problem in getting date and time in textbox
Ajax innerHTML response showing Script tag
Javascript Functions with Arguments