问答详情
源自:5-2 圣诞雪橇

这段代码看不懂,求解答一下

var that = this;    var next = function(){        return this.next.apply(that,arguments)    }.bind(this) 这段代码实现的是什么功能,看不懂,有大神解答一下吗

提问者:qq_深_2 2016-01-10 14:11

个回答

  • Rhinel
    2016-01-11 22:41:05
    已采纳

    pageA.prototype.run = function(callback){
        var that = this;
        var next = function() {
            return that.next.apply(that, arguments)
        }.bind(that);

    这样好理解一点,其实这里this,that都一样,因为next方法在下面马上要调用了,所以在这个方法内作用域this和that都一样;这个this指代的是pageA()的实例,next()函数的意思就是,调用pageA()的next方法作用与新的对象上(但that还是pageA本身),并且使用新的参数;然后再将返回的方法改变一下指针,变成that(但还是pageA本身),然后运行下。

    pageA.prototype.run = function(callback){
        var that = this;
        var next = function() {
            return this.next.apply(this, arguments)
        }.bind(this);

    用人话说就是,bind的this(你当成that好了,就是外层函数的this)代替了next匿名函数中的this,然后在调用变成that的next方法作用于that自身并且使用next匿名函数的新参数。

    var that = this;
    var next = function(op) {
            return that.next(op); 
        };

    所以你发现,我把代码改成上面这样竟然也能完美运行!无非就是调用了一下pageA的next方法嘛!

    所以作者只是在花样晒技术,被玩死的内存君表示哭晕在厕所。

    var next = function(op) {
            return this.next(op); 
        }.bind(this);

    你还可以这样玩。


    这是个玩弄指针和颠来倒去apply、bind的问题,对了,还有一个call方法。

  • 窗外的阳光
    2017-04-27 11:14:27

    对于argument,请看官方文档:http://www.w3school.com.cn/js/pro_js_functions_arguments_object.asp

  • zhongkeyuan
    2016-06-10 08:37:56

    这个课程的作者真的各种炫,完全不考虑实际的方便。