您正在失去方法的束缚
this。
从此更改:
setTimeout(this.talk, 5000, 'hello again');
对此:
setTimeout(this.talk.bind(this), 5000, 'hello again');
当您
this.talk作为函数参数传递时,它将接受
this并查找方法,
talk并传递对该函数的引用。但是,它仅传递对该函数的引用。与您所拥有的对象不再有任何关联
this。
.bind()允许您传递对微小存根函数的引用,该存根函数将跟踪
this并以方式调用您的方法
this.say(),而不仅仅是
say()。
如果您只是这样做,则可以看到相同的内容:
const talker = new Talker();'const fn = talker.say;fn();
这将产生相同的问题,因为将方法分配给
fn根本没有关联
talker。它只是一个函数引用,与对象没有任何关联。事实上:
talker.say === Talker.prototype.say
是什么
.bind()做的是创建一个小存根功能,将保存对象的值,然后将使用该对象调用你的方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)