引用类变量中的原型方法

时间:2012-09-13 13:25:07

标签: javascript prototype

我正在处理我正在处理的JS原型对象。我要做的是将类级变量定义为对象文字,然后返回到类的原型方法之一来设置类级变量的属性,但我没有得到任何结果。以下是我想要做的事情,简化示例:

var foo = function(args)
{
    this.name = 'bar';
}
foo.stuff = { barbaz: this.foobarbaz(2) };

foo.prototype.foobarbaz(int)
{
    return int;
}

alert(foo.stuff.barbaz); // should alert 2, but I'm missing something

我想知道在这种情况下我是否只是误解了'this'的范围,或者当我将它指定给foo.stuff.barbaz时是否未定义this.foobarbaz()。

是否可以从像这样的类级变量中引用对象的原型方法?

1 个答案:

答案 0 :(得分:0)

以下是您需要了解的内容:

  1. 您应该在原型上定义您的方法,例如foo.prototype.foobarbaz = function(int) {...}。您当前的语法无效。

  2. 您在定义之前尝试使用该方法。如果您期望function hoisting在此工作,那只适用于函数声明,而不适用于赋值。在第一次使用时将foobarbaz的分配移动。

  3. 在您提供的此功能中,this不是foo。每个函数都有自己的值this(称为函数'" context "),每次设置函数被调用。您可以在Understanding Javascript scope with "var that = this"的多个答案中查看有关如何设置函数上下文的规则。

  4. 相反,在这里,您需要使用foo.foobarbaz(2)代替this.foobarbaz(2),因为this可能是window(假设您将此代码称为对象的方法而不是JavaScript的strict模式)。