锁定ECMAScript 2015类实例方法的“这个”范围?

时间:2016-08-18 21:40:26

标签: javascript angularjs class ecmascript-6 angular-controller

我正在ECMAScript 2015(6)中编写一些类,并且他们有在Chrome中本机运行的实例方法。

有时当框架调用该方法时,它们将使用.apply(null,..),并且该类的实例方法将其'this'绑定为null(或其他内容)。

显然这是一种经典的JavaScript技术,但我认为作为一个类实例方法,'this'永远不会改变。

我知道胖箭头方法可以否定使用apply / call / bind调用它们但我不认为我可以用这种方式创建实例方法。

有没有办法锁定类实例方法使其'this'反弹?

例如(使用Angular 1.5.8):

class SafeZoneController {
    /* @ngInject */
    constructor ($scope) {
        this.active = null;
        // Angular uses .apply(null), so I have to negate that with .bind(this)
        // but it would be nice if I didn't have to.
        $scope.$on('toggleSafeZone', this.onToggleSafeZone.bind(this));
    }
    onToggleSafeZone() {
        switch (this.active) {
            case null:
                this.active = 'fill';
                break;
            case 'fill':
                this.active = 'outline';
                break;
            case 'outline':
                this.active = null;
                break;
            default:
                break;
        }
    }
}

由于

0 个答案:

没有答案