我的建议是避免这种情况以及避免使用@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 开发人员一样讨厌污染全局命名空间,请将与 x(在我的示例中为 Person)相关的所有函数 直接 包装在其中,而不是嵌套更深1级。例如
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"
这背后的想法是在同一嵌套级别创建与x(在我的示例中为Person)相关的所有函数。
他们可以在没有这些疯狂的嵌套结构的情况下轻松调用实例中的其他函数和属性。也无需添加参数,因为您是从 那个 实例调用函数(当然,这将根据您的需要而改变)。
作为额外的好处,您不再需要您所要求的,因为您现在只需使用 me2.somefunction() 访问该功能,而不必深入挖掘。
希望我能提供帮助;)