访问函数 javascript

accessing function javascript

如何从其他命名空间访问函数?

例如:

FavoriteFlavor.instructState.prototype = { 
    test: function() {
      // call function show from chooseEmoticonState
      // I have tried calling FavoriteFlavor.chooseEmoticonState.show();
    }
}

FavoriteFlavor.chooseEmoticonState.prototype = {
    show: function() {
    }
}

一种方法是直接从 prototype 对象调用方法:

FavoriteFlavor.chooseEmoticonState.prototype.show();

但是,任何 this 实例引用都不会指向 instructState 的实例。您可以通过使用 call or apply 方法并将 this 作为第一个参数传递来更正此问题。

FavoriteFlavor.chooseEmoticonState.prototype.show.call(this);

此外,除非您有理由不这样做,否则您可以简单地将 chooseEmoticonState 原型的 show 方法添加到 instructState 原型。

FavoriteFlavor.instructState.prototype.show = FavoriteFlavor.chooseEmoticonState.prototype.show;

show 函数在 FavoriteFlavor.chooseEmoticonState.prototype 上,而不是 FavoriteFlavor.chooseEmoticonState,因此您 可以 调用它:

FavoriteFlavor.chooseEmoticonState.prototype.show();

但考虑到它在原型上,直接调用它并没有多大意义。

chooseEmoticonState:

的实例上调用它才有意义
// assume chooseState has been instantiated with 
//    new FavoriteFlavor.chooseEmoticonState();
chooseState.show();

或者如果 show() 不是一个实例方法,直接放在 FavoriteFlavor.chooseEmoticonState:

FavoriteFlavor.chooseEmoticonState = {
    show: function() {
    }
};

然后你可以用你之前尝试过的方式来称呼它:

FavoriteFlavor.choseEmoticonState.show();

采用不同的 javascript 模式:(只是为了多样性)

http://jsfiddle.net/za6muccw/

FavoriteFlavor = {};

FavoriteFlavor.chooseEmoticonState = (function(){
         //private
    var myprivate = "im private";

    function show(){
        alert("goo")
    }

    return {
        show : show //its making me public
    }
})();

FavoriteFlavor.instructState = (function(){
   //private
   var myprivate = "im private";
   FavoriteFlavor.chooseEmoticonState.show();
})();