我的以下代码正在运行,但是当我使用ES6语法时,它不再起作用了。请解释一下发生了什么?
此代码完全正常运行。
echo $_POST
然后我在某种程度上改变了ES6的语法。 然后代码看起来像这样:
function Library(){ this.books = [];};
Library.prototype.addBook = function(book){
this.books.push(book);
};
Library.prototype.getBook = function(index){
return this.books[index];
};
var m = new Library();
m.addBook('The Demon Haunted World');
m.getBook(0);
// output will be like 'The Demon Haunted World'
为什么这不起作用?我收到以下错误:
function Library(){ this.books = [];};
Library.prototype.addBook = (book) => {
this.books.push(book);
};
Library.prototype.getBook = (index) => {
return this.books[index];
};
var m = new Library();
m.addBook('The Demon Haunted World');
答案 0 :(得分:5)
this
属于窗口,而不是Library
构造函数。之所以发生这种情况,是因为箭头函数binds
具有窗口对象的上下文lexically
或parent
的环境。
function Library(){ this.books = [];};
Library.prototype.addBook = (book) => {
console.log(this); //window
this.books.push(book);
};
通常在JS中,我们有两个上下文/范围[Global,Function]。在您的情况下,arrow
函数指向window context
或nearest parent context.
即窗口。