javascript – 我的’这个’在哪里?使用objects方法作为回调函数

我有一个关于 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

那么,我的’这个’在哪里?

解决方法

“这个”是后期绑定.也就是说,它在函数执行之前就被绑定了.它的作用取决于你如何调用你的函数.

如果你称之为(函数调用):

myfunction();

“this”与全局对象绑定

如果你称之为(方法调用):

myobject.myfunction();

“这个”被绑定到“myobject”

你也可以像这样调用它(调用invokation):

myfunction.call(myobject);

在这种情况下,“this”绑定到myobject

还有(构造函数invokation):

new MyFunction();

其中“this”绑定到一个新构造的空白对象,其原型是MyFunction.prototype.

无论如何,这就是javascript的创建者如何谈论它. (我认为在规范中以这种方式讨论)调用函数的不同方式.

新版本的ecmascript标准(ecmascript5)包括原型库的“绑定”方法,该方法返回一个函数,其中“this”prebound为您指定的内容.例如:

mynewfunction = myfunction.bind(myobject);
  mynewfunction();

mynewfunction的调用已将“this”绑定到myobject.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...