我正在处理我正在处理的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()。
是否可以从像这样的类级变量中引用对象的原型方法?
答案 0 :(得分:0)
以下是您需要了解的内容:
您应该在原型上定义您的方法,例如foo.prototype.foobarbaz = function(int) {...}
。您当前的语法无效。
您在定义之前尝试使用该方法。如果您期望function hoisting在此工作,那只适用于函数声明,而不适用于赋值。在第一次使用时将foobarbaz
的分配移动。
在您提供的此功能中,this
不是foo
。每个函数都有自己的值this
(称为函数'" context "),每次设置函数被调用。您可以在Understanding Javascript scope with "var that = this"的多个答案中查看有关如何设置函数上下文的规则。
相反,在这里,您需要使用foo.foobarbaz(2)
代替this.foobarbaz(2)
,因为this
可能是window
(假设您将此代码称为对象的方法而不是JavaScript的strict
模式)。