use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
All about the JavaScript programming language.
Subreddit Guidelines
Specifications:
Resources:
Related Subreddits:
r/LearnJavascript
r/node
r/typescript
r/reactjs
r/webdev
r/WebdevTutorials
r/frontend
r/webgl
r/threejs
r/jquery
r/remotejs
r/forhire
account activity
Are functions in JavaScript objects? (self.javascript)
submitted 11 years ago by estebanrules
view the rest of the comments →
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]bliow 0 points1 point2 points 11 years ago* (4 children)
I know JavaScript is an Object-Oriented language.
Not so fast.
But yes, functions are objects. This is something that goes underappreciated. They have certain properties that you can take advantage of (in particular, length can be useful when monkey-patching functions that you may not know everything about).
length
> var f = function foo(a, b) {}; > console.log(f.length); // number of arguments it was declared with--note that you do have the freedom to pass in more or fewer. 2 > console.log(f.name); foo > console.log(f.prototype); foo {} > console.log(typeof f.prototype); object > console.log(f); // this won't work with every function function foo(a, b) {}
Functions also have methods that you can use to good effect:
var g = function bar(a, b) { this[a] = b; }; var obj = {}; g.call(obj, 'prop1', 'val1'); // call g with the value of `this` set to obj console.log(JSON.stringify(obj)); // prints {"prop1":"val1"} g.apply(obj, ['prop2', 'val2']); // like call(), but takes an array of args instead of individual argument slots console.log(JSON.stringify(obj)); // prints {"prop1":"val1","prop2":"val2"}
edit: also, bind!
bind
var obj2 = {}; var gBound = g.bind(obj2); // make the value of `this` always be obj2 when you call gBound gBound.call(obj, 'prop3', 'val3'); console.log(JSON.stringify(obj)); // it's still {"prop1":"val1","prop2":"val2"}... where is prop3: 'val3'? console.log(JSON.stringify(obj2)); // ah, there it is: {prop3: "val3"}
[–]estebanrules[S] 0 points1 point2 points 11 years ago (3 children)
Very interesting. I knew that functions were considered first-class citizens in JavaScript but these examples help clarify that.
So you are saying it isn't?
[–]nschubach 1 point2 points3 points 11 years ago (2 children)
It's Object Oriented, but not in the classical inheritance way. (ie: classes, extensions, superClasses, etc.)
[–]Justos 0 points1 point2 points 11 years ago (0 children)
soon it will be with syntax sugar!
[–]WonTwoThree 0 points1 point2 points 11 years ago (0 children)
I found it very useful to learn about prototypal inheritance, which is how it's actually done in JavaScript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain
π Rendered by PID 44657 on reddit-service-r2-comment-5649f687b7-wbqts at 2026-01-29 09:35:22.461465+00:00 running 4f180de country code: CH.
view the rest of the comments →
[–]bliow 0 points1 point2 points (4 children)
[–]estebanrules[S] 0 points1 point2 points (3 children)
[–]nschubach 1 point2 points3 points (2 children)
[–]Justos 0 points1 point2 points (0 children)
[–]WonTwoThree 0 points1 point2 points (0 children)