如何在JavaScript 2015(EcmaScript 6)中对此进行别名?

The Koju效应

在EcmaScript 5中,我们可以thisvar ctrl = this以下代码片段所示进行别名

// EcmaScript 5
function BookController {
    var ctrl = this;

    ctrl.books = [];

    ctrl.getBook = getBook;

    function getBook(index) {
        return ctrl.books[index];
    }
}

BookController与ES6中等效,使用class我曾在其中一个场景中getBook被调用this以外BookControllergetBook功能,我想确保上下文总是BookController让我想别名thisBookController在ES6。

// EcmaScript 6
class BookController {

    constructor() {
        this.books = [];
    }

    getBook(index) {
        return this.books[index];
    }
}

如何this在JavaScript 2015(EcmaScript 6)中使用别名

TJ人群

BookController与ES6中的类等效

不,这不相等,明显不同。您的class示例实质上等同于此ES5:

function BookController {
    this.books = [];
}
BookController.prototype.getBook = function getBook(index) {
    return this.books[index];
};

请注意,它getBook是在原型上定义的,使用时将分配给实例new BookController但这不是您的第一个示例所做的。您的第一个示例为getBook每个实例分配一个不同的属性,作为“拥有”(不继承)属性。

getBook功能,我想确保上下文总是BookController让我想别名thisBookController在ES6。

它不是别名,而是参考。您可以使用相同的方法(在构造函数中)执行此操作,但是不需要变量:

// EcmaScript 6
class BookController {

    constructor() {
        this.books = [];
        this.getBook = index => {
            return this.books[index];
        };
    }
}

因为这是一个箭头函数,所以它关闭了this

例:

// EcmaScript 6
class BookController {

  constructor() {
    this.books = [];
    this.getBook = index => {
      return this.books[index];
    };
  }
}

let c1 = new BookController();
c1.books.push("The Hitchhiker's Guide to the Galaxy");
let f1 = c1.getBook;

let c2 = new BookController();
c2.books.push("Do Androids Dream of Electric Sheep?");
let f2 = c2.getBook;

console.log(f1(0));
console.log(f2(0));

但是请注意,没有特定原因可以这样做,通常的事情是将管理权this交给调用者。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在PowerShell中对此进行别名

如何在ES6中获取Set的第一个元素(EcmaScript 2015)

ES6 javascript中的at符号(@)有什么作用?(ECMAScript 2015)

for ... of循环语句如何在Javascript中起作用?(ECMAScript 6)

如何在PHP中对此进行评估

检查JavaScript对象是Map还是Set(ECMAScript 2015)

ES6(EcmaScript 2015)模块:import index.js

TypeScript与ES6的兼容程度(ECMAScript 2015)

ECMAScript 2015(ECMAScript 6)是否具有类初始化程序?

..循环(.ECMAScript 6)的Javascript

如何在VS2015中创建NPM,Javascript项目

如何在Visual Studio 2015 RC中调试JavaScript?

如何在ecmascript 6中导入json文件?

如何在ecmascript-6中导入模块?

如何在ecmascript 6中的warriorjs游戏中定义方法?

如何在ECMAScript类中调用方法

如何在新的String函数中对此进行突变?

我如何在Ansible中对此进行循环

如何在答案集编程中对此进行编码?

您将如何在 Django 中对此进行建模?

如何在Unix中对此模式进行grep

我如何在 DynamoDB 中对此进行建模?

如何在JavaCC中实现JavaScript / ECMAScript“此处没有LineTerminator”规则?

截至2018年支持ES6(ECMAScript 2015)

ECMAScript 2015(ES6)和'let'和'const'有什么区别?

Visual Studio 2015支持使用ECMAScript 6自动完成括号

如何在网页中使用ECMAScript6模块

如何在Ionic中使用EcmaScript 6功能?

如何测试和声/ ES6 / ECMAScript 6 JavaScript?