在EcmaScript 5中,我们可以this
按var 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
以外BookController
。在getBook
功能,我想确保上下文总是BookController
让我想别名this
的BookController
在ES6。
// EcmaScript 6
class BookController {
constructor() {
this.books = [];
}
getBook(index) {
return this.books[index];
}
}
如何this
在JavaScript 2015(EcmaScript 6)中使用别名?
BookController
与ES6中的类等效。
不,这不相等,明显不同。您的class
示例实质上等同于此ES5:
function BookController {
this.books = [];
}
BookController.prototype.getBook = function getBook(index) {
return this.books[index];
};
请注意,它getBook
是在原型上定义的,使用时将分配给实例new BookController
。但这不是您的第一个示例所做的。您的第一个示例为getBook
每个实例分配一个不同的属性,作为“拥有”(不继承)属性。
在
getBook
功能,我想确保上下文总是BookController
让我想别名this
的BookController
在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] 删除。
我来说两句