2014-02-16 1 views
1

그래서 "object [object]"를 말하는 것이 아니라 객체 나 배열의 그룹을 기록하려고 할 때 콘솔 로그를 더 잘 만들려고 노력하고 있습니다. 몇 가지 인수를 통해 모듈에서 함수를 호출하는 데 문제가 있습니다. 웬일인지, 그 2 개의 차이가있다.모듈 외부에서 함수 호출 - 올바르게 전달되지 않는 인수들

console.log(createMessage("Message: {0}", "hello")); //logs Message: hello 
                // (what I actually want) 

specialConsole.writeLine("Message: {0}", "hello"); //logs ["Message: {0}", "hello"] 

첫 번째 로그는 모듈에서, 두 번째 로그는 외부에서 호출됩니다. 그래서 난 그냥 첫 번째 로그를 호출하려고하지만, specialConsole.writeLine을 사용하고

writeLine: function() { 
    console.log(createMessage(arguments)); 
} 

:이 specialConsole.writeLine 반환 것입니다. 미안해, 내 질문이 너무 어리 석다해도 나는 초보자 다. Here is my full code in jsfiddle

답변

1

writeLine에 두 개의 매개 변수를 전달하는 경우, arguments 특별한 변수가 개최 둘 다 당신이 실제로 배열을 전달하는 것으로 가정하고 그것으로 데이터를 인쇄 createMessage에 그대로 객체와 같은 배열의 값은 당신이 그것을 통과하고 입니다.

이를 해결하기 위해,

writeLine: function() { 
    console.log(createMessage.apply(null, arguments)); 
} 

Function.prototype.apply 기능은 개별 파라미터 들로서 객체 같은 어레이의 모든 요소를 ​​통과한다.

0

나는이 두 가지의 차이점은 별도의 인수가 아닌 목록으로 인수를 전달한다는 것입니다. 이 작업을 수행 할 것이라는 점을 해결하기 위해 : 당신은 당신이뿐만 아니라 그 모두를 확장해야합니다 이상의 인수를 전달하려는 경우이 차이를 볼

writeLine: function() { 
    console.log(createMessage(arguments[0], arguments[1]); 
} 

을, 그러나이 방법은 깨끗하지 않습니다.

배열을 허용하도록 createMessage를 확장하는 것이 좋습니다.

+0

createMessage는 배열과 객체에서 정보를 얻기 위해 설계 되었기 때문에 훨씬 더 복잡 할 것입니다. 배열 배열을 통과해야 할 때 작성하기가 너무 복잡 할 것입니다. 나는 아직 초보자입니다 ... 모든 인수에 대해 specialConsole.writeLine을 호출 할 수있는 방법을 제안 해 주시겠습니까? 어떤 종류의 사이클이나 뭔가? – user3127242

+0

@ user3127242 당신은 그런 것을 필요로하지 않습니다. 내 대답을 확인해주세요. – thefourtheye

+0

@thefourtheye 오, 그게 훨씬 깔끔한 방법입니다. 나는 나를 위해 그것을 할 수있는 기능이 있다는 것을 알지 못했다. – Maistho

관련 문제