-1

私の<head>ページので、私はこれを行います:

<script type="text/javascript" src="js/foo.js"></script>
<script type="text/javascript">
  console.log(foo.bar);
</script>

のコードfoo.js

var foo = function()
{
    this.bar = function()
    {
        console.log('here');
    }
}

後でhtmlドキュメントで:

<a href="#" onclick="foo.bar();">Test</a>

ただし、上のリンクをクリックすると、foo.jsが含まれていても関数が定義されていないと表示されます。また、これを行うconsole.log(foo)と、「function()」のみが表示され、 console.log(foo.bar)undefinedが表示されます。なぜこれなのか、なぜ関数にアクセスできないのですか?

4

6 に答える 6

7

オブジェクトを作成していないからです。これは、コードを実行する正しい方法です。

var foo = function()
{
    this.bar = function()
    {
        console.log('here');
    }
}

var instance = new foo();
instance.bar();

http://jsfiddle.net/zerkms/wDaEn/

または、別の方法で定義することもできます。

var foo = {
    bar: function() {
        console.log('here');
    }
};

foo.bar();​

http://jsfiddle.net/zerkms/wDaEn/1/

于 2012-05-28T20:26:47.450 に答える
4

インスタンスクラスメンバーを使用thisおよび作成しているため、最初にクラスをインスタンス化する必要があります。

var fooClass = new foo;
console.log(fooClass.bar());
于 2012-05-28T20:27:03.683 に答える
4

この方法が必要かどうかはわかりませんが、console.log(foo.bar);機能させるには次のようにします。

var foo = {
    bar: function() {
        console.log('here');
    }
};
于 2012-05-28T20:30:23.663 に答える
2

最小限のコード変更には、以下を使用します。

<script type="text/javascript">
    var foo = function()
    {
        this.bar = function()
        {
           console.log('here');
        };
        return this; // magic yes ?
    };


foo().bar();
</script>
于 2012-05-28T20:36:52.350 に答える
1

foo.jsfooを関数に初期化するだけの内容...foo()が呼び出されるまで、含意の内容は重要ではありません。したがって、foo.barは未定義です。

于 2012-05-28T20:28:21.477 に答える
-1

上記の答えはすべて正しいわけではありません。javascriptにはクラスまたはそのクラスのインスタンスの概念がないことを忘れないでください。Javascriptのスコープとクロージャについて読んでみます。

オブジェクトを変数名バーに割り当てるときは、それをローカルスコープに割り当てます。次に、グローバルコンテキストからローカル関数にアクセスしようとしています。これは間違っています。

私はあなたが次のことに沿って何かを試みていると確信しています:-

var foo = {
      bar: function() {

      }
}

等...

于 2012-05-28T20:34:34.327 に答える