javascript

You are currently browsing articles tagged javascript.

Ok, last of the Douglas Crockford videos. These are definitely worth viewing if you program at all in JavaScript. The highlight for me was his presentation of prototypal and parasitic inheritance models and contrasting them with the pseudo-classical approach that is typically presented. I haven’t had time to analyze his approach in depth, but from a single viewing, his ideas certainly merit experimentation and seem to fit in more naturally to the JavaScript language.

I felt he did a good job of presenting natural ways of handling encapsulation, inheritance and code reuse while capitalizing on JavaScript’s strengths instead of trying to impose a class-based design onto the language. He also covered several ways of utilizing closures nicely.

function object(0) {
  function F() {}
  F.prototype = o;
  return new F();
}
newobject = object(oldobject);

var singleton = function () {
  var privateVariable;
  function privateFunction(x) {
    ...privateVariable...
  }
  return {
    firstMethod: function (a,b) {
      ...
    },
    secondMethod: function (c) {
      ...
    }
  };
}();

Object.prototype.later = function(msec, method) {
  var that = this,
      args = Array.prototype.slice.apply(arguments, [2]);
  if (typeof method === 'string') {
    method = that[method];
  }
  setTimeout(function () {
    method.apply(that, args);
  }, msec);
  return that;
};

Advanced JavaScript Part 1 of 3
Advanced JavaScript Part 2 of 3
Advanced JavaScript Part 3 of 3

Tags: ,

Here’s a set of 3 videos by Douglas Crockford on the DOM that were in between his JavaScript and Advanced JavaScript presentations. Pretty basic material, but you may find a few helpful hints. A few comments:

  1. Comment hack for JavaScript hasn’t been necessary for 10 years!
  2. language=javascript has been deprecated
  3. type=’text/javascript’ is ignored if you use the src attribute
  4. remove any event handlers of a node before deleting it due to MS garbage collection incompetencies
  5. avoid trickling, bubbling is where the action is

Theory of the DOM Part 1 of 3

Theory of the DOM Part 2 of 3

Theory of the DOM Part 3 of 3

Tags: , , , ,

Thanks to Jordan Liggitt for passing on some videos on JavaScript by Douglas Crockford who is a senior JavaScript architect at Yahoo! The first series is pretty basic, but if you’re new to the language, it’s a very good introduction. Here are some random items I thought were noteworthy:

  • Brendan Eich at Netscape originally wanted to make a dialect of Scheme, but his manager said that people wouldn’t accept “all those parentheses”, and he should make something with a friendlier syntax. Too bad, I would love to able to program Scheme in the browser
  • Brendan did sneak in lambda though, he just didn’t call it that :)
  • No separate character type, just strings of length 1
  • == and != do type coercion; === and !== do not
  • bitwise operators convert to a 32 bit signed integer and then back to a 64 bit float, so don’t use them for efficiency like you might in C
  • don’t use the with statement
  • be careful with for (var name in object) due to iteration of inherited members also
  • blocks don’t have scope, only functions do
  • vars are implicitly global if not declared
  • 4 ways to call a function

    1. functionObject(args)
    2. thisObject.methodName(args)
      thisObject["methodName"](args)
    3. new functionObject(args)
    4. functionObject.apply(thisObject[, args])
  • don’t use eval except for trusted JSON
  • http://www.JSLint.com a tool Crockford wrote
  • Semicolon insertion: when the compiler sees an error, it attempts to replace a nearby linefeed with a semicolon and try again! Always use the full correct form including semicolon. This was a surprise to me because once I discovered semicolons were optional, I stopped using them for a cleaner look. Oops.

The JavaScript Programming Language Part 1 of 4
The JavaScript Programming Language Part 2 of 4
The JavaScript Programming Language Part 3 of 4
The JavaScript Programming Language part 4 of 4

I’ll post another entry after I go through Crockford’s advanced series.

Tags: ,

I noticed a friend of mine (Jordan L.) who had half-star ratings (2.5, 3.5, etc.) on Netflix. When I asked him about it, he said to just “hover over the left side of the star” to get a half-star rating. This didn’t work for me, so I thought it might be a Linux vs. Windows thing and asked another friend (Mike F.) to try it out. Same result – didn’t work in IE or Firefox on Windows. Then Mike found a JavaScript file that could be installed with greasemonkey and that worked fine for him.

I’ve yet to install greasemonkey, and I don’t like the idea of installing JavaScript on my system unless I’ve thoroughly analyzed it, so I thought of another way.

I installed wireshark on my Ubuntu Linux box and sniffed the network traffic to Netflix when I rated a movie. After some experimenting and removal of extraneous info, I came up with the following URL to rate a movie with half stars. This specific URL will rate the movie “The Incredibles” with a 4.5 star rating (probably a bad example since The Incredibles clearly deserves a 5 star rating):

http://www.netflix.com/SetRating?widgetid=M70001989&value=4.5

To rate other movies, simply replace 70001989 with the id of the movie which you can find by hovering over the movie. I believe you’ll need to be logged in to Netflix already for this to work.

Now as to why Jordan can rate half-stars without the aid of a greasemonkey script, that’s still a mystery.

Update: got an email from Jordan explaining that his Netflix pages include the following two JavaScript source files:

src=”http://www.netflix.com/layout/jscript/dom_starbar_v2.js?v=126505″
src=”http://www.netflix.com/layout/jscript/dom_starbar_halfstars.js?v=126505″

I only have the first one, and from the name of the second one, I presume that’s the one that gives him the special half star rating capability. I guess Netflix favors Jordan over me :(

Update 2: mystery solved! My curiosity got the best of me so I contacted Netflix. The rep said they’re running a test and Jordan just happened to get picked (I didn’t mention Jordan, but I suppose they looked through my ‘friend’ list)! They do that periodically to test features to see if they’ll give them to the unwashed masses. I asked if they could run the test on me, and he said it didn’t work that way :) So I guess it’s the greasemonkey script or the inconvenient URL hack for the rest of us.

Tags: , , , ,

Newer entries »