猿问

javascript的bind()方法的兼容性写法

兼容写法一:

if (!function() {}.bind) {


Function.prototype.bind = function(context) {

    var self = this

        , args = Array.prototype.slice.call(arguments);

        

    return function() {

        return self.apply(context, args.slice(1));    

    }

};

}


兼容写法二:

if (!Function.prototype.bind) {


    Function.prototype.bind = function(oThis) {

        if (typeof this !== 'function') {

            throw new TypeError(

                'Function.prototype.bind - what is trying to be bound is not callable'

            );

        }

        var aArgs = Array.prototype.slice.call(arguments, 1),

            fToBind = this,

            fNOP = function() {},

            fBound = function() {

                return fToBind.apply(

                    this instanceof fNOP && oThis ? this : oThis,

                    aArgs.concat(Array.prototype.slice.call(arguments))

                );

            };

        fNOP.prototype = this.prototype;

        fBound.prototype = new fNOP();

        return fBound;

    };

}


这两种的区别在哪,哪种写法好,理由?


慕虎7371278
浏览 605回答 1
1回答
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答