Polyfill


javascriptは様々な歴史的原因及び先端界の典型的な急進的な特徴により、いくつかの良い設計とモジュールが様々なプラットフォームで動作できなくなりました.(ここでは各種プラットフォームは主に各大手のブラウザに年火が加えられないNodejsを指します.)しかし、プログラマはそのために書類を作成する必要があります.プログラマーは各種モジュールのpolyfillを知る必要があります.Object.signextendcloneSeajsなどの関数に小さいものがあります.大きなモジュールは、RequirejsPromiseのようなファイルモジュールローディングモジュール、callback hellのような解決モジュールを担っています.工事が実際に必要である限り、主流のプラットフォームによって実現されない限り、私達は必ずそれを実現しなければなりません.幸いなことに、これは開源のいい時代です.一部のモジュールはgooglegithubにあります.ここでは主にいくつかの一般的なモジュールのpolyfillが実装されている.
extens(引き継ぎ)
     javascriptには独自の継承機構がある.extensを実現するには、ソースオブジェクトのプロトタイプチェーンを汚染してはいけないと考える必要があります.
Object.extend = Obj.extend || function(d, s, override) {
    var keys = Object.keys(s);
    for(var i = 0, len = keys.length; i < len; i++) {
        var k = keys[i];
        if(!d[k] || !!override) {
            d[k] = s[k];
        }
    }
    function _x() {this.constructor = d;}
    _x.prototype = s.prototype;
    d.prototype = new _x();
};
まず、sオブジェクト自体の属copydオブジェクト(sオブジェクトのプロトタイプチェーン上の属性を含まない)に与える.次にdオブジェクトのプロトタイプをsオブジェクトに移動します.注意したいのは、dのプロトタイプオブジェクトに対して、後で ``sオブジェクトのプロトタイプチェーンを修正するべきではないので、中間に隔離層を置くことです.後はこうやって使えます.
function Drived(_super) {
    _super.call(this);
    //...
}
window.extend(Drived, super);
nodejsはすでに内蔵の実現があります.)
bind(匿名関数)
私たちはjs関数の続きを知っています.thisは動的に指定できます.bindはとても使いやすい文法飴です.
Function.prototype.bind = Function.prototype.bind || function() {
    var func = this;
    var args = [].slice.call(arguments);
    var ctx = args.shift();
    return function() {
        func.apply(ctx, args.concat([].slice.call(arguments)));
    }
};