
Learning Advanced JavaScript (2008) - kparaju
http://ejohn.org/apps/learn/
======
sjnair96
Once again I am going to shamelessly plug my favorite course author Anthony
Alicea and his JS/NodeJS/Angular1 course[1],[2],[3]. I really really liked
Tony's course as it gave quite a deep look into topics, which are usually only
attainable from books, while at the same time keeping it very interesting and
also contain lots of best practice material and being extremely dense but easy
to digest. Do let me know if you guys know any other courses of the same
style. For quite a while I have been trying to find similar courses/tutorials
of similar caliber when it comes to knowledge gained and being easy to digest.
If you haven't watched any of Tony's courses, do give them a shot. Rigorous --
but not boring or too long.

[1][https://www.youtube.com/watch?v=Bv_5Zv5c-Ts](https://www.youtube.com/watch?v=Bv_5Zv5c-Ts)

[2][https://www.youtube.com/watch?v=ejBkOjEG6F0](https://www.youtube.com/watch?v=ejBkOjEG6F0)

[3][https://www.udemy.com/understand-
nodejs/?couponCode=LEARNNOD...](https://www.udemy.com/understand-
nodejs/?couponCode=LEARNNOD..).

Disclaimer: Because it may sound like it, I'd like to clarify I have
absolutely no affiliation with Tony or his courses. I just really really liked
them.

~~~
551199
JS course is fantastic, but the Angular one isn't that great.

Alicea has React course called 'React and Flux for Angular Developers'in
Pluralsight if anyone is looking more of his courses.

------
zappo2938
When I started out, this and "Secrets of the JavaScript Ninja" didn't help me
understand. For me, after months of trying to understand JavaScript, Dmitry
Soshnikov's post, JavaScript. The Core, made understanding closure, prototype,
and scope chain crystal clear in about 30 minutes. [0] Also, every time
someone shares a basics on JavaScript link on Hacker News I also share my
interview guide which despite its popularity has yet to land me a job writing
JavaScript. Nonetheless, I love writing JavaScript and understanding it and
some of the APIs like Angular, Lodash, Nightmare, and async makes me feel
empowered. It doesn't cover any topics in ES6 yet.[1]

[0] [http://dmitrysoshnikov.com/ecmascript/javascript-the-
core/](http://dmitrysoshnikov.com/ecmascript/javascript-the-core/)

[1] [https://github.com/adam-s/js-interview-
review](https://github.com/adam-s/js-interview-review)

------
lancefisher
This is fairly old. It goes with John Resig's book "Secrets of the JavaScript
Ninja Released" which was released at the beginning of 2013 [1]. I remember
seeing this site up well before that. He started the book in 2008.

If you can work your way through this tutorial you'll gain a decent grasp of
ES5 prototypes and functions.

[1]: [http://ejohn.org/blog/secrets-of-the-javascript-ninja-
releas...](http://ejohn.org/blog/secrets-of-the-javascript-ninja-released/)

~~~
hackerboos
The second edition of that book was released this year.

[https://www.amazon.ca/Secrets-JavaScript-Ninja-John-
Resig/dp...](https://www.amazon.ca/Secrets-JavaScript-Ninja-John-
Resig/dp/1617292850/ref=dp_ob_title_bk)

------
Noseshine
Since we are talking about learning Javascript, there is a very interesting
approach in this edX course: Teach biology and Javascript!

"Nature, in Code: Biology in JavaScript" \-- Learn JavaScript programming by
implementing key biology concepts in code, including natural selection,
genetics and epidemics.

    
    
      Instead of just learning programming principles outside of
      any context, you will learn JavaScript programming by
      implementing key biological concepts in code so they can
      run in your browser.
    

[https://www.edx.org/course/nature-code-biology-javascript-
ep...](https://www.edx.org/course/nature-code-biology-javascript-epflx-
nic1-0x)

------
nikki93
Haven't gone past the first slide yet, but FWIW with ES6 you could do
something like:

    
    
      [nikki ~]$ node
      > const bind = (fn, obj, ...args1) => (...args2) => fn.call(obj, ...args1, ...args2)
      undefined
      > bind(console.log, console, 'a', 'b')('c', 'd')
      a b c d
      undefined
      > // calls `fn` with `obj` as `this` and the remaining arguments prepended with given ones
    

I believe all of the old-style argument stuff with `arguments` is possible
with `...`, not sure though, maybe some edge cases.

------
CryoLogic
This seems like very beginner level JavaScript. Defining Functions, Functions
as Objects, Context? All JS fundamental concepts.

~~~
cocktailpeanuts
I think now it's all considered basic since JS ecosystem has grown a lot and
people take it for granted, but probably back then these were all advanced
materials you couldn't find easily.

~~~
minitech
No, they were still basic in 2008. (ES3 was published in 1999.) JavaScript
hasn’t changed very much as a language; just the tools around, mostly.

~~~
cocktailpeanuts
In 2008 javascript programmers were called "script kiddies" and the language
was only starting to get wider adoption. Unless you were already an
experienced web programmer back then this was advanced material for most web
programmers who only used to use javascript for displaying alerts and cute
dynamic features.

Speaking from my own experience, I didn't know about all these prototypes and
important concepts for a long time and and did fine. I built tons of web apps
without knowing these "advanced" features. It was only when I decided to learn
the language seriously that I got acquainted with a lot of these features like
the prototype concept, object constructors, etc.

If you can build pretty advanced production websites without knowing these
features I would say these features are advanced. That said, it's a different
story now because javascript is an important language. But my point is in 2008
it wasn't.

Also this guy created jQuery, if he says it's advanced, it probably was.

~~~
minitech
> In 2008 javascript programmers were called "script kiddies"

Yeah, by pretentious people who thought…

> most web programmers who only used to use javascript for displaying alerts
> and cute dynamic features.

… that. I wouldn’t call someone who only knows how to display an alert a
“JavaScript programmer” or base what are considered advanced concepts off of
them.

> Also this guy created jQuery, if he says it's advanced, it probably was.

jQuery is a pretty normal library that gained a lot of popularity. It’s not
particularly advanced.

------
andrewvijay
I still consider myself to be a noob but I use a lot of these everyday. For
example currying instead of binding. Am I just being humble?

~~~
dancek
You're obviously humble. If you know good functional programming practices
from elsewhere, you might still be a noob when it comes to the JS ecosystem
though.

------
RobSchley
Where's the "Advanced" part? This is just JavaScript fundamentals.

~~~
nathancahill
You underestimate the JS populace

~~~
mark_edward
Do you mean overestimate?

~~~
Noseshine
Or underestimate the spread of Javascript over the population, which
necessarily includes more and more people less familiar with programming :-)

------
rodorgas
It's amazing to see what was "advanced" JavaScript in 2008 haha.

------
jongar_xyz
> #2: Goal: To be able to understand this function: > > // The .bind method
> from Prototype.js > Function.prototype.bind = function(){ > var fn = this,
> args = > Array.prototype.slice.call(arguments), object = args.shift(); >
> return function(){ > return fn.apply(object, >
> args.concat(Array.prototype.slice.call(arguments))); > }; > }

I do not want to understand this absurdness. I want a comment that tells me
what it does so I can rewrite it in a sane way.

~~~
ht85
Do you really think it's good practice to use comments to describe how the
language itself works? It's not like you can't find comprehensive, quality
documentation for every single thing that happens in that function on MDN or
equivalent.

Is that function that insane? I can understand it at a glance, and performance
is high (it matters here). AS a JS programmer, just knowing that it is an
implementation of bind() should be enough of a hint that it uses its first
argument as context, the rest as a curry and the arguments of the newly
generated function as additional arguments.

~~~
RandomInteger4
To be fair, the syntax of the variable initialization could be separated into
3 lines for better clarity.

------
nnoitra
VM213:1 Uncaught ReferenceError: assert is not defined(…)

------
known
JS Design Patterns is also good
[https://addyosmani.com/resources/essentialjsdesignpatterns/b...](https://addyosmani.com/resources/essentialjsdesignpatterns/book/)

