제 제안은이 상황을 피하고 @marvel308's answer을 사용하지 않는 것입니다. 나는 물론 사용자를 싫어하지 않는다. 나는 단지 링크 된 대답이 좋은 노력에도 불구하고 제공하는 가독성과 이해력을 싫어한다. 솔루션 일 수도 있지만, 이해하기 쉽지 않으므로 사용하는 것을 볼 때마다 반드시 Google에 알려야 할 것입니다.이를 피하십시오.
원하는 것에 따라 여러 가지 대안이 있습니다. 예를 들어 프로그램의 구조를보다 "평면적"으로 생각할 수 있습니다. 중첩은 일반적으로 일을 더 복잡하게 만듭니다. 따라서 피하는 것이 좋습니다. 행동
function Person(name, age) {
this.name = name;
this.age = age;
}
function sayHelloToPerson(person) {
console.log("Hello! " + person.name + ", it seems you are: " + person.age + " years old");
}
:
이제 중첩이 절대적으로 필요합니다 것이 아닙니다, 당신은 최상위 수준에 정의 된 여러 기능을 사용하는 대신에,이 훨씬 더 간단한 솔루션을 선택할 수 있습니다 :
var me = new Person("SidOfc", 22);
sayHelloToPerson(me);
// => "Hello! SidOfc, it seems you are: 22 years old"
유스 케이스가 너무 불분명하지만, 이러한 방법으로, 당신은 명확한 의도를 유지하기 때문에이 코드의 유용성에 대해 확신 할 수 없다 당신이 우리를 항상 할 수 함수가 필요로하는 모든 데이터를 전달하는 함수 인수 (이 경우 person
인수). 다른 모든 JS 개발자가 거기에 글로벌 네임 스페이스를 오염 싫어처럼
는 경우, 대신에보다 깊은 한 수준의 중첩의 안에 (내 예에 Person
) x
관련된 모든 기능 직접 포장. 예 : 행동
function Person(name, age) {
this.name = name;
this.age = age;
this.sayHello = function() {
console.log("Hello! " + this.name + ", it seems you are: " + this.age + " years old");
this.sayGoodbye();
};
this.sayGoodbye = function() {
console.log("Goodbye! " + this.name);
}
}
:
var me2 = new Person("SidOfc", 22);
me2.sayHello();
// => "Hello! SidOfc, it seems you are: 22 years old"
// since sayHello calls this.sayGoodbye() we also get:
// => "Goodbye! SidOfc"
이 뒤에 아이디어는 당신이 관련된 모든 기능을 만드는 것이 당신의 중첩과 동일한 수준에서 (내 예 Person
) x
.
그런 다음이 미친 중첩 구조없이 인스턴스 내의 다른 함수 및 속성을 쉽게 호출 할 수 있습니다.에서 해당 함수를 호출 할 때부터 인스턴스 (물론 필요에 따라 변경됨)를 호출해야하므로 매개 변수를 추가 할 필요가 없습니다.
추가 보너스로, 이제 깊이 파고 들지 않고 me2.somefunction()
을 사용하여 기능에 액세스 할 수 있기 때문에 더 이상 요구하지 않아도됩니다.
희망 사항 :
사용 사례는 무엇입니까? 나에게 이것이 불분명 한 것처럼 보이는데, 왜 이것을 필요로 할까? 최상위 레벨에서 함수를 선언하고이 중독성이없는 패턴을 사용하지 않는 한 중첩하지 않아도됩니다. 나는 당신이 당신의 _problem_을 설명하는 것이 아니라 당신의 solution _ 문제를 설명하고 있다고 생각합니다. 어쩌면 우리가 이것에 대한 생각을 알면, 대신에 더 나은 대안을 줄 수 있습니다. – SidOfc