有没有办法访问函数内部的函数,该函数位于JavaScript的其他函数中?
function x(name, age) {
this.name = name;
this.age = age;
this.a = function() {
this.b = function() {
return "b";
};
return "a";
};
}
var xobj = new x('vin', 25);
console.log(xobj.a.b()); //error

答案 0 :(得分:2)
你可以做到
function x(name, age){
this.name =name;
this.age = age;
this.a = function(){
this.b = function(){
return "b";
};
return "a";
};
}
var xobj =new x('vin',25);
var xx = new xobj.a();
console.log(xx.b());
您必须声明x.a()的实例,然后调用b
当函数用作构造函数(使用new关键字)时,它将绑定到正在构造的新对象。所以如果你想在函数a()中调用它,你必须使用new关键字
创建一个构造函数答案 1 :(得分:0)
我的建议是避免这种情况并避免使用@marvel308's answer。我当然不喜欢用户:)我只是不喜欢链接的答案提供的可读性和可理解性,尽管努力。虽然它可能是一个解决方案,但是每次看到它时都可能需要谷歌,因为它不容易理解 - 让我们避免这样做。
根据您的需要,有多种选择,您可以重新考虑您的程序结构,例如更“平坦”。 嵌套通常会使事情变得更加复杂,因此避免它会在大多数情况下对你有好处。
现在,如果嵌套不是 绝对需要,那么您可以使用顶层定义的多个函数来选择更简单的解决方案:< / p>
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"
我无法确定此代码的可用性,因为用例太不明确但是这样,你保持意图清晰,你总是可以使用函数参数传入你的函数需要的任何数据(如{{1在这种情况下,参数。)。
如果您和其他所有讨厌全局命名空间的JS开发人员一样,请将与person
(我的示例中为x
)相关的所有函数包含在直接中。嵌套深度超过1级。 e.g。
Person
行动中:
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
访问该功能而不必深入挖掘。
希望我可以提供帮助;)