2016-08-13 3 views
0

많은 사람들이 JavaScript의 객체 지향 컨텍스트에서 "this"키워드를 사용하는 것을 봅니다. 파이썬과 다른 언어에서 "자기"가 사용되는 것과 비슷합니다. 객체 지향 컨텍스트에서 "모듈 패턴"을 사용하여 "this"를 사용하지 않아도되었습니다. 예를 들어왜 OO 자바 스크립트에서 "this"를 사용합니까?

:

var robot = (function() { 
    // private variables 
    var status = "on"; 
    var name; 

    // private function 
    function turnOff() { 
     status = "off"; 
    } 

    // public function 
    function setName(new_name) { 
     name = new_name; 
    } 

    return { 
     setName: setName 
    }; 
})(); 

또는,이 패턴 :

var robot = function(robot_name) { 
    // private variables 
    var status = "on"; 
    var name = robot_name; 

    // private function 
    function turnOff() { 
     status = "off"; 
    } 

    // public function 
    function setName(new_name) { 
     name = new_name; 
    } 

    return { 
     setName: setName 
    }; 
}; 

var FooBot = new robot('Foo'); 
var BarBot = new robot('Bar'); 

은 "이"단지 기본 설정을 사용하여인가? 또는, 나는 무엇인가 놓치고 있냐?

+0

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/this –

+4

예, 많은 것들을 놓치고 있습니다. –

+0

하나는 좀 더 작습니다 (틀림없이, 더 나은 점은 'this'를 사용하는 것과 다른 언어와 여전히 유사하지는 않습니다). – BalinKingOfMoria

답변

3

아니요, this은 선호하지 않습니다. this은 함수가 호출 된 개체를 파악하는 데 유용합니다.

이 예에서는이 정보가 필요하지 않으므로 this은 유용하지 않습니다.

그러나 여러 인스턴스와 생성자를 고려하고, 각자가 자신의 관련 데이터를 가지고 :

class Robot { 
    constructor(name) { 
    this.status = "on"; 
    this.setName(name); 
    } 
    turnOff() { 
    this.status = "off"; 
    } 
    setName(new_name) { 
    this.name = new_name; 
    } 
} 
var robotFoo = new Robot('foo'); 
var robotBar = new Robot('bar'); 

어떻게 읽고 this를 사용하지 않고 원하는 인스턴스의 데이터를 저장할 것인가?

정적 메서드를 사용하고 인스턴스를 인수로 전달할 수는 있지만 그렇게하면 더 못 생깁니다.

+0

답변 해 주셔서 감사합니다. 내 질문에 다른 패턴을 포함하도록 편집했습니다. 이 추가 된 패턴이 자신의 것으로 작동하지 않습니까? 나는 오해라고 생각합니다. – RylonMcnz

+1

@RylonMcnz 추가 된 패턴은 각 객체 인스턴스에 대해 정의한 함수의 새 인스턴스를 생성하지만 클래식 프로토 타입 상속을 사용하면 모든 멤버 메소드가 정확히 한 번 정의되어 모든 인스턴스에 사용됩니다. 이를 확인하려면, 두 번째 예제에서'FooBot.setName == BarBot.setName'과이 예제의'robotFoo.setName == robotBar.setName'을 비교하십시오. 만약 당신이'Robot'의 여러 인스턴스를 만들면 당신의 접근 방식은 많은 메모리를 낭비합니다. –

+0

오. 그건 의미가 있습니다. – RylonMcnz

관련 문제