ECMAScript 5 and JS frameworks

JavaScript

Standards are being always approved with a slow pace. Though, the features declared in drafts usually find their implementation long before the standard release. Let’s take for an instance Websockets, which were already implemented in Chrome/Safari and Firefox 4b when standard unexpectedly changed. Apparently YUI3 and jQuery have implemented for long time the features, which are only coming up with ECMAScript 5 (the implementations is called JavaScript 1.8.5) spread.

YUI 3 from the very beginning introduced controllable attributes. It is used like that:

...
var attributeConfig = {
    attrA : {
        // Configuration for attribute "attrA"

        value: 5,

        setter: function(val) {
            return Math.min(val, 10); 
        },

        validator: function(val) {
            return Y.Lang.isNumber(val);
        }
    },

    attrB : {
        // Configuration for attribute "attrB"
    }
};

this.addAttrs(attributeConfig, userValues);
...

Or

this.addAttr("attrA", {
     // Configuration for attribute "attrA"
});

Now look at ECMA 5 code:

var objA = Object.create(ClassA, {
    attrA : {
        get : function () { /* . . . */ },
        set : function (val) { /* . . . */ },
        enumerable: true
    },
    attrB : {
        // Configuration for attribute "attrB"
    }
});

or

Object.defineProperty(ClassA, " attrA ", {
    // Configuration for attribute "attrA"
});

New methods of ECMAScript 5 such as Array.isArray, Array.map, Array.filter, Array.trim are implemented to jQuery almost identically.

For the method Function.bind, jQuery has analog $.proxy. Just compare:

var funcA = function() { .. };
jQuery.proxy(funcA, this);

and

var funcA = function() { .. };
funcA.bind(this);

So, what about frameworks? Shouldn’t we use these features natively now instead? It seems not yet. They are implemented only in Firefox 4, IE 9, Safari 5 and Chrome 5+. I doubt that most of your users have installed those versions already. But some day… Some day JS will meet harmony.