为什么这个javascript代码段不起作用?
我下面的代码正在工作,但当我使用ES6语法时,它就不再工作了。请解释发生了什么事 此代码完全正常工作为什么这个javascript代码段不起作用?,javascript,ecmascript-6,Javascript,Ecmascript 6,我下面的代码正在工作,但当我使用ES6语法时,它就不再工作了。请解释发生了什么事 此代码完全正常工作 function Library(){ this.books = [];}; Library.prototype.addBook = function(book){ this.books.push(book); }; Library.prototype.getBook = function(index){ return this.books[in
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'
然后我在某种程度上改变了ES6的语法。
代码如下所示:
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');
为什么这不起作用?我得到以下错误:
VM505:2 Uncaught TypeError: Cannot read property 'push' of undefined(…)
此
属于窗口,而不是库
构造函数。之所以发生这种情况,是因为箭头函数将上下文与窗口对象或父对象的环境绑定在一起
function Library(){ this.books = [];};
Library.prototype.addBook = (book) => {
console.log(this); //window
this.books.push(book);
};
通常在JS中,我们有两个上下文/范围[Global,Function]。在您的情况下,箭头
函数指向窗口上下文
或最近的父上下文。
即窗口 可能重复因为这不代表您的对象您正确地发现了问题,但您的描述非常不准确。箭头函数中对参数
、超级
、此
和新建的引用。目标
始终解析为词汇封闭环境中的绑定。这就是全部。没有上下文,没有范围,没有窗口。顺便说一句,JS有两种以上的作用域:至少是全局、模块、函数、块和迭代作用域。。。ES5,其唯一功能/全局。。。可能正在使用eval,您可以创建动态上下文,并且try/catch有自己的作用域。。。