为什么我不能使用原型为变量分配函数?

时间:2016-01-02 01:00:58

标签: javascript

我一直在尝试为变量分配一个函数,并且我不断收到一条消息,说foo不是一个函数。我不确定为什么这么说。当我单独调用该方法时,它可以工作,但是当我将它分配给变量时,它不会起作用。

任何人都可以帮我解决这个问题吗?谢谢!!!

以下是我的代码:

function Test(){

    function foo(){
        return "foo";
    }

    this.bar = function () {
        var foo = foo();
        console.log(foo);
    };
}
var test = new  Test();
test.bar();

5 个答案:

答案 0 :(得分:5)

罪魁祸首就是这一行var foo = foo();。语句var foo正在重新声明本地foo变量。当您尝试使用foo()访问它时,它已成为undefined变量。

重命名变量或函数,一切正常。

答案 1 :(得分:2)

以下代码将有效。现在我们不是试图将相同的函数变量赋给变量。

问题是因为JavaScript是功能范围的。它是失败的,因为this.bar函数将首先尝试评估foo而foo是此函数中的变量名称,因此解释器将尝试执行foo但foo在此范围内是可变的,它不会考虑上面提到的foo。因此它失败了。

当foo1工作时,因为当解释器命中术语foo1时,它将查找当前范围和所有父范围,并且它将获得它。

<%= @categorization.book.title %>

答案 2 :(得分:0)

错误就在这一行

var foo = foo();

您的变量foo与该函数同名,将该函数隐藏在外部。

重命名它将解决错误。

var foo1 = foo();

答案 3 :(得分:0)

您从这一行看到的错误是:

var foo = foo();

当您使用var时,您说正在为当前的范围级别foo定义this.bar - 这意味着它不会冒泡到{{} 1}}。您可以将变量重命名为其他内容:

Test

或者只是放弃这个变量:

var result = foo();
console.log(result);
完全是你的选择。

答案 4 :(得分:0)

如果您正在学习如何创建和使用JavaScript对象,您可能需要像这样重写代码:

0
  

所有JavaScript对象都从它们继承属性和方法   原型。使用对象文字或新对象创建的对象   Object(),继承自Object.prototype的原型。对象   使用new Date()创建的继承Date.prototype。该   Object.prototype位于原型链的顶部。

来自:http://www.w3schools.com/js/js_object_prototypes.asp