2017-12-08 17 views
0

그래서이 작업을 수행해야하는 몇 가지 예를 보았습니다. 하지만 분명히, 나는 그것을 놓치고 있기 때문에, 뭔가를 놓치고있다. :/객체 프로토 타입이 'this'를 사용하여 속성에 액세스 할 수 없습니다.

누군가 제발 나에게 여기에서 잘못된 것을 설명해 줄 수 있습니까? :)

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 

, 여기 뭔가 잘못하고 있어요. 그러나 나는 무엇을 모른다.

감사합니다. Gergely. 당신은 function() 사용해야

+3

화살표 (또는 로켓) 기능'this' 일반 기능'this'과 동일하지 않습니다 - 일반적으로, 화살표 기능 –

+1

이 동의 객체들 프로토 타입 기능에 맞는 패턴하지 않습니다 @ JaromandaX와 함께. 코드를 다음과 같이 변경하십시오 :'Code.prototype.add = (v) => {'이'Code.prototype.add = function (v) {'이것은'this' 포인터를 수정합니다. 화살표 함수를 사용하면 * this 포인터는 함수가 선언 된 시점의 포인터가됩니다. – Intervalia

+0

'''function (element)'''=> –

답변

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')) 

는 다르게 화살표 함수의 this 작품 이후, () => 화살표 fucntion의 instaed.
this은 외부 범위에있는 this만을 나타냅니다.

+2

포인터 만 사용하면 복제본에 답하는 것이 좋지 않습니다. 문제를 알고 있으면 더 나은 검색어를 작성하고 일치하는 항목을 찾을 가능성이 큽니다. 그러한 게시물을 찾아서 게시물을 중복으로 표시해야합니다. 나도 알다시피, 당신은 그것에 대한 충분한 담당자가 없으므로, 당신은 코멘트에 링크를 추가해야하고 누군가 투표 할 것입니다. 포털을 깨끗하게 유지하려고합니다. 좋은 하루 되세요 :-) – Rajesh

+0

@Rajesh이 사이트를 잘 사용하는 방법에 대한 친절한 설명에 감사드립니다! – moon

+0

젠장! 나는 이것을 시도했다. 그게 바로 내가 복제물을 보지 못했던 이유입니다. 그리고 물론 그것은 작동합니다. ... Wth man :(어쨌든 고맙습니다! :) – Hannibal

-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'))

+2

그냥 포인터입니다. 중복 된 답변을하는 것은 나쁜 습관입니다. 당신이이 문제를 안다면 더 나은 검색 질의를 만들어 일치하는 것을 찾을 가능성이 높습니다. 그런 게시물을 찾아서 게시물을 중복으로 표시해야합니다. 또한 볼 수있는 담당자가 충분하지 않으므로 추가해야합니다. 코멘트에있는 링크와 누군가 투표 할 것입니다. 포털을 깨끗하게 유지하도록 노력하십시오. 좋은 하루 보내십시오 :-) 또한 설명이없는 대답은 불완전합니다. – Rajesh

+0

알겠습니다. 나는 그 다음 시간에 따라 올 것이다. 감사합니다. :) –