2013-06-28 2 views
2

속성을 사용하는 메소드가있는 객체가 있습니다. 이 속성을 올바르게 사용하고 있습니까?js 객체의 속성을 메소드에 전달합니다.

function TestObject(words) { 
    this.words = words; 

    function alertStuff() { 
    console.log(this.words); 
    } 
} 

doItPlease = new TestObject('say something!'); 
doItPlease.alertStuff(); 

답변

4

JavaScript에서는 속성 및 변수가 다릅니다.

this.alertStuff = function() { 
    console.log(this.words); 
} 

예제의 this은 새 개체를 참조합니다. 생성자 함수의 모든 매개 변수/변수는 해당 객체와 직접적인 관계가 없습니다.


더 많은 관용구는 함수를 각 인스턴스가 아닌 공통 프로토 타입 객체에 추가하는 것입니다. 이 작품은 어떻게

TestObject.prototype.alertStuff = function() { 
    console.log(this.words); 
} 

doItPlease.alertStuff()을 수행 할 때, alertStuff에서 this의 값이 자동으로 doItPlease 객체로 설정되어 있다는 점이다. 따라서 alertStuff() 메서드는 해당 개체 및 모든 속성에 액세스 할 수 있습니다.

TestObject 생성자로 만든 모든 인스턴스의 프로토 타입 체인에 동일한 TestObject.prototype 개체가 있기 때문에 모두 동일한 기능을 공유하므로 메모리 오버 헤드가 적습니다.

+0

정말 고맙습니다. 객체 정의의 중괄호 안에 메소드를 정의 할 수 있습니까? 하나의 코드 블록이 내 객체를 정의하고 다른 객체가 프로토 타입을 확장하고 싶지 않다. –

+0

@DonnyP : 객체 정의의 중괄호로 무엇을 의미하는지 모르겠습니다. 여기서는 중괄호 만 함수 몸체를 정의합니다. 또한 객체를 정의하는 하나의 코드 블록이 무엇을 의미하는지, 다른 하나는 프로토 타입을 확장하는 것이 확실하지 않습니다. 당신이 피하려고하는 것을 설명해 주시겠습니까? –

+0

@DonnyP 예 가능합니다. 이를 클로저 (closure)라고합니다. 클로저 내부의 함수는 범위 내에서만 사용할 수 있습니다. – Tamillharasan

관련 문제