[英]Invoke public function from internal/private function?
只是想知道我是否缺少什么,但是我尝试执行以下操作:
(function() {
var thing = function() {
var doIt = function() {
console.log("just do it");
this.updateValue(5);
};
return {
updateValue: function(val) {
console.log('updating value: ' + val);
},
go: function() {
doIt();
}
}
};
var t = thing();
t.go();
}())
这导致控制台中显示“ just do it”,然后显示错误b / c,提示“ updateValue”不是函数。
我想知道内部/私有函数(例如“ doIt”)是否可以调用公共函数(例如“ updateValue”)? 也许这只是一个糟糕的设计,您永远都不应该真正想要这样做,并且我实际上已经重构了我的代码来避免/不这样做,但是我很好奇是否可行。
提前致谢。
无论是使用呼叫/适用于明确指定为上下文this
(如@SLaks和@Alnitak)提到或者在一开始定义函数,然后将其添加为一个属性返回的对象:
var thing = function() {
var updateValue = function () { /* */ },
doIt = function() {
console.log("just do it");
updateValue(5);
};
return {
updateValue: updateValue, // minor duplication here
go: function() {
doIt();
}
};
};
如果次要重复让您感到烦恼,您也可以这样做:
var thing = function() {
var exposed = {
updateValue: function(val) {
console.log('updating value: ' + val);
},
go: function() {
doIt();
}
}, doIt = function() {
console.log("just do it");
exposed.updateValue(5);
};
return exposed;
};
编写doIt()
,在全局上下文中调用该函数,因此this
是window
对象。
您需要编写doIt.call(this)
来将this
传递为doIt
的上下文。
每个@SLaks答案,当由doIt()
调用时, this
是不正确的。
相反,请尝试:
doIt.call(this);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.