如果我有代码:
function RandomObjectThatIsntNamedObjectWhichIOriginallyNamedObjectOnAccident() {
this.foo = 0;
this.bar = function () {
this.naba = function () {
//How do I reference foo here?
}
}
}
答案 0 :(得分:11)
您需要self
参考:
function RandomObjectThatIsntNamedObjectWhichIOriginallyNamedObjectOnAccident() {
var self = this;
this.foo = 0;
this.bar = function () {
this.naba = function () {
self.foo; //foo!
}
}
}
答案 1 :(得分:6)
function SomeObject() {
var self = this;
this.foo = 0;
this.bar = function () {
this.naba = function () {
self.foo;
}
}
}
答案 2 :(得分:3)
尝试以下
function SomeObject() {
var self = this;
this.foo = 0;
this.bar = function () {
this.naba = function () {
//How do I reference foo here?
self.foo
}
}
}
答案 3 :(得分:1)
首先:不要为你的函数Object
命名,它会影响全局Object
构造函数。
我没有看到您必须在naba
内为bar
分配实例的原因。你为什么做这个?您可以将bar
和naba
分配给函数原型:
function MyConstructor() {
this.foo = 0;
}
MyConstructor.prototype.bar = function () {
};
MyConstructor.prototype.naba = function () {
// this.foo
};
最终,它取决于您正在调用naba
函数的 。您将其分配给this
这一事实表明您想要使用
var obj = new MyConstructor();
obj.naba();
如果您只想在调用naba
后添加bar
,您仍然可以通过foo
访问this.foo
:
MyConstructor.prototype.bar = function () {
if(!this.naba) {
this.naba = function() {
// this.foo
};
}
};
var obj = new MyConstructor();
obj.bar();
obj.naba();
如果你想要一个正确/更好的答案,你必须说明你将如何使用naba
。
答案 4 :(得分:0)
有趣的是,你不需要做任何特别的事情。
this
参考有效:
function SomeObject() {
this.foo = 0;
this.bar = function () {
this.naba = function () {
alert(this.foo); // this works!
}
}
}
由于您始终将“方法”分配给同一参考,this
仍将指向bar
内,稍后位于naba
内。