访问嵌套函数中的属性返回另一个函数

时间:2016-10-28 18:22:04

标签: javascript function nested return return-value

有没有办法在嵌套函数中访问属性:

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()”。 为什么它会像那样,有没有办法以某种方式访问​​该属性,同时仍然返回另一个函数?

3 个答案:

答案 0 :(得分:1)

如果您有一个返回对象的构造函数,该对象将替换您分配给this的任何内容。确实,成员new_funcsomeValue已经丢失。

要将返回的功能与其他成员组合在一起,您可以执行以下操作:



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