JS。返回对象函数返回函数

时间:2016-09-06 11:21:53

标签: javascript function object

我有两个内部功能的对象。并且第一次工作完美,但第二次返回错误比#34; helper.calc.add不是函数"。怎么了?

例如首先:

var calc = (function () {
    var add;
    var remove;

    // some functions add and remove...

   return {
    add: add,
    remove: remove
  }
})();

calc.add(1);

第二名:

var helper = (function () {
   return {
        calc: function () {
           var add;
           var remove;

           // some functions add and remove...

           return {
              add: add,
              remove: remove
          }
       }
  }
})();

helper.calc.add(1);

在控制台中:

1
Uncaught TypeError: helper.calc.add is not a function

小提琴:https://jsfiddle.net/pk4tsnnt/

2 个答案:

答案 0 :(得分:0)

helper.calcfunction,而不是object

调用function以访问函数返回的对象的属性。



var handler = 1;
var calc = (function() {
  var add;
  var remove;
  if (handler > 0) {
    add = function(a) {
      console.log(a++);
    };
    remove = function(a) {
      console.log(a--);
    };
  } else {
    add = function(a) {
      console.log(a += 2);
    };
    remove = function(a) {
      console.log(a -= 2);
    };
  }
  return {
    add: add,
    remove: remove
  }
})();

var helper = (function() {
  return {
    calc: function() {
      var add;
      var remove;
      if (handler > 0) {
        add = function(a) {
          a++;
        };
        remove = function(a) {
          a--;
        };
      } else {
        add = function(a) {
          a += 2;
        };
        remove = function(a) {
          a -= 2;
        };
      }
      return {
        add: add,
        remove: remove
      }
    }
  }
})();

calc.add(1);
helper.calc().add(1);




答案 1 :(得分:0)

  

modified 您的 console.log 以显示最终结果。你之前是   错误地将calc解释为object,它是function。   第二是   您可以使用ES6方法从函数返回对象

它会重新构造添加和删除对象,这与ES6中的解构相反。

return { add, remove } 

相当于

 return { add : add, remove: remove }

var handler = 1;

var calc = (function () {
	var add;
    var remove;
      
	  if (handler > 0) {
      add = function (a) {
         console.log('calc add ' , ++a);
     } ;
    remove = function (a) {
      console.log(a--);
    };
  } else {
    add = function (a) {
      console.log(a += 2);
    };
    remove = function (a) {
      console.log(a -= 2);
    };
  }

  return { add, remove }

})();

var helper = (function () {
	return {
  	calc: function () {
    	var add;
      var remove;
      
      if (handler > 0) {
      	add = function (a) {
        	console.log('Helper calc add ', ++a);
        };
        remove = function (a) {
        	a--;
        };
      } else {
      	add = function (a) {
        	a += 2;
        };
        remove = function (a) {
        	a -= 2;
        };
      }
      
      return { add , remove }
      
    }
  }
})();

calc.add(1)
helper.calc().add(1)