2010-11-29 11 views
0

나는 약간 혼란 스럽다. 자바 스크립트 개체 문제

function myObject(){ 
this.keyOne=1; 
this.keyTwo=2; 
this.keyThree=3; 

function add(){ 
return this.keyOne+this.keyTwo+this.keyThree; 
} 

return{ 
    add: add 
} 

} 

그렇게
var newObject = new myObject(); 

가 잘 작동으로이 객체를 생성하고 모든 속성이 올바른지 : 내가 좋아하는 자바 스크립트 객체를 만들려고합니다. 하지만 함께

var result = newObject.add; 

모든 키가 갑자기 정의되지 않았습니다! 왜 그런지 몰라? :/

답변

3

당신은 노출 있어요 방식으로 add()를 정의하지 않는, 당신은 예를 들어,이 작업을 수행 할 수 있습니다 :

function myObject(){ 
    this.keyOne=1; 
    this.keyTwo=2; 
    this.keyThree=3; 

    this.add = function(){ 
     return this.keyOne+this.keyTwo+this.keyThree; 
    } 
} 
var newObject = new myObject(); 
var result = newObject.add(); 

You can test it here합니다.

괄호로 add()을 호출해야합니다. 함수이거나 함수가 아니기 때문에 함수 자체를 반환합니다.

+0

내가 얻을 그런 식으로 구현 : 당신은 번호를 지정하는 호출자가 다음과 같이 추가 할 수 있었다

var o = myObject(); alert(o.add()); 

: 그것은 만들고 다른 기능을 포함하는 객체를 반환 그냥 평범한 기능입니다 "결과의 표현식"myObject.add '[정의되지 않은] 함수가 아닙니다. "; – mkind

+0

@mkind - 위와 같이 정확하게 * 가지고 있습니까? 데모에서 어떻게 작동하는지 확인할 수 있습니다 ... 버전이 확답과 다를 수 있습니다 : –

+0

생성 및 호출이 다른 js 파일에서 발생한다고해도 올바르게 포함되면 문제가되지 않습니다. ? – mkind

3

표준 JavaScript에서 키워드 public은 현재 의미가 없습니다. 원래의 코드를 기반으로

, 나는 당신이 의미 의심 다음 add 기능 :

function myObject(){ 
    this.keyOne=1; 
    this.keyTwo=2; 
    this.keyThree=3; 

    function add(){ 
     return this.keyOne+this.keyTwo+this.keyThree; 
    } 

    return { 
     add: add 
    }; 
} 

기능은 다음 하나 개의 속성을 가진 개체를 반환합니다. 이 개체는 return 키워드 뒤에 개체 리터럴에 의해 만들어집니다.

그러나 그렇다면 this을 사용하는 것은 의미가 없습니다. 당신이 쓴 수 :

function myObject() { 

    var keyOne=1; 
    var keyTwo=2; 
    var keyThree=3; 

    function add() { 
     return keyOne + keyTwo + keyThree; 
    } 

    return { 
     add: add 
    }; 
} 

또는 더 간결 :

function myObject() { 

    var keyOne=1; 
    var keyTwo=2; 
    var keyThree=3; 

    return { 
     add: function() { 
      return keyOne + keyTwo + keyThree; 
     } 
    }; 
} 

이 당신이 그것을 new로 시작 호출 할 필요가없는 추가 된 장점을 가지고 있습니다.

function myObject(keyOne, keyTwo, keyThree) { 

    return { 
     add: function() { 
      return keyOne + keyTwo + keyThree; 
     } 
    }; 
} 

var o = myObject(5, 4, 7); 
alert(o.add()); 
+0

감사합니다 .. "공개"그냥 철자가 잘못되었습니다. 나는 그것을 위에 바꿨다. – mkind