-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)显示未定义。这是为什么,为什么我无法访问该功能?

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.js只是将 foo 初始化为一个函数......实现中的内容在foo()被调用之前并不重要。所以 foo.bar 是未定义的。

于 2012-05-28T20:28:21.477 回答
-1

上面的答案并不都是正确的,请记住 javascript 没有类或所述类的实例的概念。我会阅读 Javascript 范围和闭包。

当您将对象分配给变量名 bar 时,您将其分配给本地范围。然后,您尝试从全局上下文访问您的本地函数。这是错误的。

我敢打赌您正在尝试以下方法:-

var foo = {
      bar: function() {

      }
}

ETC...

于 2012-05-28T20:34:34.327 回答