1

さて、Javascript私が変更したくない次のコードを考えると:

(function () {

    function iWantToCallThis(){
        // Do some stuff
    }

    window.SomeObject = {

        theirfunc = function(){
            // Do some stuff
        },

        otherFuncIDontWantToCall = function(){
            // This works, but don't want to call this function.
            iWantToCallThis();
            // does other stuff
        }

    }

}());

iWantToCallThis()次のように SomeObject のスコープを介してアクセスするにはどうすればよいですか:

window.SomeObject.theirfunc = (function (func){
    iWantToCallThis();
    func.apply(this, arguments);
} (win.SomeObject.theirfunc));

私はその機能を元のスコープで - 技術的に - 実行すると考えていますが、アクセスできませんiWantToCallThis()。元のソース コードを編集せずにその機能にアクセスする方法はありますか?

ありがとうございました!

4

3 に答える 3

1

短い答えは、あなたができないということです。

長い答えは、コードを変更しないことに気が変わってから戻るiWantToCallThisと、クロージャーを作成することになる可能性があるということです。頻繁に行うと、パフォーマンスの問題が発生する可能性があります。

于 2013-05-10T21:34:08.640 に答える
1

マシュー、

私見ですが、Douglas Crockford の「JavaScript のプライベート メンバー」は、このトピックに関する決定的な記事です。

Privileged メソッドを使用しない限り、Private メンバーに外部からアクセスできないことを納得させるのに役立つはずです。

于 2013-05-13T16:35:49.737 に答える
0

いいえ、iWantToCallThisIIFE から返されることも、SomeObject や theirfunc のようなパブリック名前空間/変数に格納されることもないためです。

もちろん、2 番目のブロックでやり始めたように、その関数の内容を手動で再現して再宣言することもできます。ただし、そのスコープのために、関数の内容を自動的に取得することはできません。

于 2013-05-10T21:31:37.313 に答える