Brett Patterson skrev:
> I am in the middle of a conversation with this guy who says that JavaScript is an object-oriented language. Is he correct? Could you please site some references?

I have read the whole thread up until now, but will answer your starting message, since I am not addressing a single specific respondent.

I am in charge of developing DOM Scripting courses for the Curriculum Framework of the WaSP Education Task Force[1]

I have therefore tried to read every single resource about JavaScript, ECMAScript and the DOM that has been written from a computer science perspective. There are not that many, which might be a reason behind the confusion.

Anyway: JavaScript (a term owned by Sun, licensed to Mozilla, and used by all browser vendors but Microsoft) is in all essence, as Liorean has stated, a superset of ECMAScript 3.0. That is also the sentiment of Brendan Eich - and should therefore be taken as a final word. (Anthony was indeed wrong about this.) JScript as implemented in Internet Explorer is roughly equivalent, but deviates in some small ways.

JavaScript is a mix of Self, Scheme and C (according to the ECMAScript 3.1 draft, the "love child between Scheme and C" according to Brendan Eich).

JavaScript is indeed Object Oriented, but even though every script is run within a host object - usually the window object of a browser - a procedural style is possible to use. 90's DHTML scripts were usually procedural and used document.write (which is not ECMAScript but part of the DOM) in a way that reminds me of *standard streams*, which could be provided by the host object, but usually aren't.

Public, private and protected methods and properties are not easily implemented. Object Oriented design patterns (singletons, factories, registry, adaptors...) can usually be emulated. Sometimes this is only done through considerable wizardry using concepts like lambda and closures.

ECMAScript 4.0 aka JavaScript 2.0 was supposed to get a limited class based inheritance mechanism to *complement* the prototype based one we use today. Those plans have been halted. ECMAScript "Harmony" will most probably *not* get any class based inheritance.

(At least two JavaScript engines (V8 and Squirrelfish Extreme) emulate class based object creation as part of their just in time compilation, but that really is a compiler issue.)

ECMASCript 3.1 will get a few new methods to facilitate easier inheritance patterns. E.g. Object.freeze(). Many popular libraries also have methods that facilitate OO-patterns.

As old school cut' n' paste coding is getting superseded by libraries procedural code is becoming less seen and OO-style coding is getting more used.

Indeed, using object chaining in JQuery et al, the programming is even well on its way to become *declarative*.

Summary:

1. JavaScript *is* OO.
2. JavaScript uses a prototypal - class-less - inheritance mechanism.
3. Anyone writing a script can use procedural style, OO-style or even make forays into a declarative style.

Nit picking on some stuff in the thread:

JavaScript has no pure hash-tables, aka associative arrays. Object properties can be used to emulate associative arrays, though. A PHP programmer will feel very limited, though.

A JavaScript object *is* not an array (once again Anthony got it wrong). It can have methods as well as properties. <aside>Arrays are however objects, and confusingly

typeof [ 1, 2 ]

evalutes to "object", not "array". A major design flaw.

The best known way to test for an array is:

Object.prototype.toString.apply(value) === '[object Array]'

Discovered by Mark Miller of Google.</aside>

From a very strict computer science point of view averything in JavaScript is *not* an object. (No matter how much Alex "Dojo" Russel et al. reiterates that mantra.) In practice everything is. JavaScript has got a few "primitives" (numbers, strings, booleans, undefined). Whenever a primitive is referenced with an OO-syntax it is converted into its corresponding wrapper object. This was modeled after Java according to Brendan, and he has stated that it probably was a bad idea. (Search the ES4 mailing list for a reference.)


Lars Gunther

Sources:

MDC, including https://developer.mozilla.org/En/About_JavaScript
ES 3.0 spec
ES 3.1 spec draft
"JavaScript, The Definitive Guide" (latest edition)
ES3.1 mailing list
ES 4/Harmony mailing list
Doug Crockfords site and book ("JavaScript, the good parts")
Numerous other JavaScript books

1. http://www.webstandards.org/2008/07/31/announcing-the-wasp-curriculum-framework/



*******************************************************************
List Guidelines: http://webstandardsgroup.org/mail/guidelines.cfm
Unsubscribe: http://webstandardsgroup.org/join/unsubscribe.cfm
Help: [EMAIL PROTECTED]
*******************************************************************

Reply via email to