我有一个关于
javascript规范或函数指针(委托?)的实现的一般性问题,它们指向对象方法.
请阅读以下代码段.这里我们有一个对象,使用’this’来访问对象字段.当我们像往常一样调用此方法时(o.method();),返回对象的指定字段的值.但是当我们创建指向此方法的指针(回调)并调用它时,返回一个未定义的值,因为方法范围内的’this’现在是全局对象.
var o = { field : 'value',method : function() { return this.field; } }; o.method(); // returns 'value' var callback = o.method; callback(); // returns 'undefined' cause 'this' is global object@H_404_5@那么,我的’这个’在哪里?
解决方法
“这个”是后期绑定.也就是说,它在函数执行之前就被绑定了.它的作用取决于你如何调用你的函数.
myfunction();@H_404_5@“this”与全局对象绑定
myobject.myfunction();@H_404_5@“这个”被绑定到“myobject”
myfunction.call(myobject);@H_404_5@在这种情况下,“this”绑定到myobject
还有(构造函数invokation):
new MyFunction();@H_404_5@其中“this”绑定到一个新构造的空白对象,其原型是MyFunction.prototype.
无论如何,这就是javascript的创建者如何谈论它. (我认为在规范中以这种方式讨论)调用函数的不同方式.
新版本的ecmascript标准(ecmascript5)包括原型库的“绑定”方法,该方法返回一个新函数,其中“this”prebound为您指定的内容.例如:
mynewfunction = myfunction.bind(myobject); mynewfunction();@H_404_5@mynewfunction的调用已将“this”绑定到myobject.