2

我正在处理的 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() 是否未定义。

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

4

1 回答 1

0

以下是您需要知道的:

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

  2. 您正在尝试在定义方法之前使用它。如果您希望函数提升在这里起作用,那仅适用于函数声明,而不适用于赋值。foobarbaz第一次使用时移动上面的分配。

  3. 在您提供的此功能中,this不是foo. 每个函数都有自己的值this(称为函数的“上下文”),在每次调用函数时设置。您可以在使用 "var that = this" 理解 Javascript 范围的几个答案中查看如何设置函数上下文的规则。

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

于 2012-09-13T13:45:15.247 回答