为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

正在回答

3 回答

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

2 回复 有任何疑惑可以回复我~
#1

qq_深_2 提问者

非常感谢!
2016-02-06 回复 有任何疑惑可以回复我~
#2

zhongkeyuan

因为next方法在下面马上要调用了,所以在这个方法内作用域this和that都一样.这怎么理解?????
2016-06-11 回复 有任何疑惑可以回复我~
#3

葛金秋

把把var next = function(){ return this.next.apply(that,arguments) }.bind(this)去掉。在next前面加that.next也是可以的。不知道大神知道为什么吗?
2016-10-05 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

1 回复 有任何疑惑可以回复我~
#1

em_heqian

哈哈 正好让你看到不懂的时候可以自己去学习
2016-11-28 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信