繁体   English   中英

从内部/私人功能调用公共功能?

[英]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() ,在全局上下文中调用该函数,因此thiswindow对象。

您需要编写doIt.call(this)来将this传递为doIt的上下文。

每个@SLaks答案,当由doIt()调用时, this是不正确的。

相反,请尝试:

doIt.call(this);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM