对象原型不能使用`this`访问属性

时间:2017-12-08 05:30:55

标签: javascript this prototype

所以,我看到了几个应该有用的例子。但显然,我错过了一些东西,因为它没有。 :/

有人可以向我解释一下我在这里做错了什么吗? :)

function Code (b) {
  this.b = b
  this.arr = []
}

Code.prototype.add = (v) => {
  console.log(this.b)
  this.arr.forEach(element => {
    console.log(element)
  });
  this.arr.push(v)
}

var c = new Code('bla')
console.log(c.add('asdf'))

所以这会引发错误:

this.arr.forEach(element => {
  ^

TypeError: Cannot read property 'forEach' of undefined

显然,我在这里做错了什么。但我不知道是什么。

谢谢! 盖尔盖伊。

2 个答案:

答案 0 :(得分:1)

function Code (b) {
  this.b = b
  this.arr = []
}
Code.prototype.add =function(v){
  console.log(this.b)
  this.arr.forEach(function(element){
    console.log(element)
  });
  this.arr.push(v)
  console.log(this.arr)
}

var c = new Code('bla')
console.log(c.add('asdf'))

您应该使用function() () =>箭头功能,因为箭头功能this的工作方式不同。
箭头函数的this仅指存在于外部范围内的this

答案 1 :(得分:-1)

function Code (b) {
  this.b = b
  this.arr = []
}

Code.prototype.add = function(v) {
  console.log(this.b)
  this.arr.forEach(element => {
    console.log(element)
  });
  this.arr.push(v)
}

var c = new Code('bla')
console.log(c.add('asdf'))