我有两个内部功能的对象。并且第一次工作完美,但第二次返回错误比#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
答案 0 :(得分:0)
helper.calc
是function
,而不是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)