bind函数详解(转)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bind函数详解(转)相关的知识,希望对你有一定的参考价值。
var name = "The Window"; var object = { name: "My Object", getNameFunc: function () { return function () { return this.name; } } }; alert(object.getNameFunc()()); //"The Window"
object.getNameFunc()返回一个匿名函数,在全局环境调用该函数,this指向的全局对象
解决这一问题,可以像下面这样,将匿名函数外部作用域中this对象保存在闭包能够访问到的变量中
var name = "The Window"; var object = { name: "My Object", getNameFunc: function () { var that = this; return function () { return that.name; } } }; alert(object.getNameFunc()()); //"My Object"
上述解决方法需要修改对象的方法,如果不能修改原对象的方法,该如何做呢?
这时,我们可以像下面这样,使用apply或call方法指定函数的作用域
var name = "The Window"; var object = { name: "My Object", getNameFunc: function () { return function () { return this.name; } } }; var func=object.getNameFunc(); alert(func.apply(object)); //"My Object"
通过apply、call,已经可以输出预期的My Object
但是,每次调用时都需要以func.apply(object)的形式调用,这不是很怪么
理想的调用方式,当然是在通过某种处理后,之后可以以func()形式调用,像下面这样
var name = "The Window"; var object = { name: "My Object", getNameFunc: function () { return function () { return this.name; } } }; var func=object.getNameFunc(); func=func.bind(object); alert(func()); //"My Object"
以上是关于bind函数详解(转)的主要内容,如果未能解决你的问题,请参考以下文章
(转)React事件处理函数必须使用bind(this)的原因