【发布时间】:2014-09-28 18:34:34
【问题描述】:
也许标题听起来有点奇怪(请改进它)——但我需要针对以下情况的解决方案。我有以下代码:
var Foo = function () {
this._hello = "world!";
};
Foo.prototype.bar = function () {
console.log(this._hello);
};
var f = new Foo();
f.bar(); // => "world!"
f.bar.apply(this); // => undefined
我知道apply 改变了上下文,所以在bar 内部,this 将是全局对象(在第二次调用时)。
但我需要的是从Foo 函数访问this。我看到的解决方案是:
var Foo = function () {
var self = this;
self._hello = "world!";
self.bar = function () {
console.log(self._hello);
};
};
但是,我会选择不在另一个函数中声明方法。
我更喜欢在同一列级别定义方法(仅用于代码样式):
var Foo = ...;
Foo.prototype.method = ...;
这可能吗?怎么样?
【问题讨论】:
-
不要费心缩进你的代码。
-
这不是“范围”,而是调用的上下文
-
你为什么要在
bar上使用apply?你的电话看起来如何不仅仅是f.bar()? -
@Bergi 我希望能够做到:
f = new Foo(); something.method(f.bar);。在这种情况下,f.bar被另一个作用域调用。
标签: javascript class methods this