有没有办法在嵌套函数中访问属性:
function func(){
this.new_func=function(){
console.log("something");
return 'something';
}
this.someValue=7;
return function(){
return "something_diff";
};
}
var obj=new func();
obj(); //works with returning "something diff"
obj.new_func(); // TypeError: obj.new_func is not a function
obj.someValue; // undefined
我需要删除整个“return function()...”部分才能访问“someValue”和“new_func()”。 为什么它会像那样,有没有办法以某种方式访问该属性,同时仍然返回另一个函数?
答案 0 :(得分:1)
如果您有一个返回对象的构造函数,该对象将替换您分配给this
的任何内容。确实,成员new_func
和someValue
已经丢失。
要将返回的功能与其他成员组合在一起,您可以执行以下操作:
function func() {
var f = function() {
return "something_diff";
};
f.new_func = function() {
console.log("something");
return 'something';
}
f.someValue = 7;
return f;
}
var obj = new func();
console.log(obj());
obj.new_func();
console.log('someValue:', obj.someValue);

答案 1 :(得分:0)
你可以这样做:
var parentFunction = function() {
var nestedFunction = function() {
var value = "nestedValue";
var moreValues = "more values";
return {
value: value,
moreValues: moreValues
}
}
var anotherNestedFunction = function() {
var anotherValue = "nestedValue";
return anotherValue;
}
return {
nested: nestedFunction,
another: anotherNestedFunction
}
}
然后:
var newFunction = new parentFunction();
var nested = newFunction.nested();
console.log("nested value: ", nested.value);
console.log("another nested value: ", newFunction.another);
Here是一个有效的例子:
答案 2 :(得分:-1)
为什么它会像那样,有没有办法以某种方式访问该属性,同时仍然返回另一个函数?
因为pharenteis:
var obj=new func();
基本上你正在解雇你的函数,变量obj存储的是“func”返回。
要访问私有属性,您应该查看闭包:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures