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

来源:5-2 圣诞雪橇

qq_深_2

2016-01-10 14:11

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

写回答 关注

3回答

  • 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方法。

    葛金秋

    把把var next = function(){ return this.next.apply(that,arguments) }.bind(this)去掉。在next前面加that.next也是可以的。不知道大神知道为什么吗?

    2016-10-05 14:24:11

    共 3 条回复 >

  • 窗外的阳光
    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

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

    em_heq...

    哈哈 正好让你看到不懂的时候可以自己去学习

    2016-11-28 16:27:17

    共 1 条回复 >

H5+JS+CSS3 实现圣诞情缘

为圣诞节准备的H5+JS+CSS特效案例教程,实现静与动的结合

122015 学习 · 211 问题

查看课程

相似问题