在Javascript中引用对象属性
如果我有密码:在Javascript中引用对象属性,javascript,oop,object,Javascript,Oop,Object,如果我有密码: function RandomObjectThatIsntNamedObjectWhichIOriginallyNamedObjectOnAccident() { this.foo = 0; this.bar = function () { this.naba = function () { //How do I reference foo here? } } } 您需要一个self参考: func
function RandomObjectThatIsntNamedObjectWhichIOriginallyNamedObjectOnAccident() {
this.foo = 0;
this.bar = function () {
this.naba = function () {
//How do I reference foo here?
}
}
}
您需要一个
self
参考:
function RandomObjectThatIsntNamedObjectWhichIOriginallyNamedObjectOnAccident() {
var self = this;
this.foo = 0;
this.bar = function () {
this.naba = function () {
self.foo; //foo!
}
}
}
试试下面的方法
function SomeObject() {
var self = this;
this.foo = 0;
this.bar = function () {
this.naba = function () {
//How do I reference foo here?
self.foo
}
}
}
第一:不要命名你的函数
对象
,它会影响全局对象
构造函数
我看不出为什么必须在bar
内将naba
分配给实例。你为什么这么做?您可以将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();
如果您只想在调用bar
后添加naba
,您仍然可以通过this.foo
访问foo
:
MyConstructor.prototype.bar = function () {
if(!this.naba) {
this.naba = function() {
// this.foo
};
}
};
var obj = new MyConstructor();
obj.bar();
obj.naba();
如果你想要一个正确/更好的答案,你必须展示你将如何使用naba。有趣的是,你不需要做任何特别的事情
此
参考工作:
function SomeObject() {
this.foo = 0;
this.bar = function () {
this.naba = function () {
alert(this.foo); // this works!
}
}
}
由于您总是将“方法”分配给同一个引用,
此
仍将在栏中指向它,然后在naba中指向它
,+1
,因为它在我之后2秒内到达^ ^我责备CAPTCHA,我会早20秒;)您应该真正使用var self
,因为this.self
将使self
可公开访问。@Rocket,不,它将与以前有相同的问题。。。在您无法访问它的地方,我看不出它是如何工作的。@JaredPar--很好的解决方案,它让我感到非常温暖和模糊,具有>150K rep的用户仍然可以犯错误:-P@Neal我会犯很多错误,尤其是在我喝完早上的咖啡之前发布:)在旁注上,Object是一个糟糕的函数名。您可以覆盖javascript的ObjectIt,这取决于您将如何使用naba
。你怎么称呼它?你在用对象做什么?此
所指的内容最终取决于调用函数的方式。只要我们不知道这一点,我们只能猜测什么是最好的解决方案。我考虑过使用它,但担心它实际上可能会创建对象的副本,而不仅仅是创建引用。谢谢大家!当然,你永远不可能创建一个“对象”,因为它覆盖了对象@ConnerRuhl——没问题^ ^ IAbstractDownvoteFactory——我知道,我刚刚离开了OP的帖子。我真的没有想到物体的名字。你的建议是不等价的naba
被分配给bar
,而不是对象。一般来说,我建议您根本不要使用这个
或原型
,因为它很容易出错。大多数人似乎完全误解了JavaScript的工作原理(以及它在没有原型的情况下工作)。如果您愿意,我可以发布一个不使用this
或prototype
@Frits的等效解决方案:我想我了解它的工作原理naba
从未分配给bar
,它被分配给该所指的任何。它很可能是构造函数的一个实例,但也可能是window
。但是这个
从来都不是条
。如果您有一个构造函数,那么使用原型是附加实例方法(节省内存)的首选方法。我看不出这个
或原型容易出错。一开始可能很难理解,但这并不是什么神秘的事情。看来你是对的,这正是我的意思,这个
令人困惑。下面是一个例子:@Fritz:this
所指的内容取决于函数的调用方式。有四种不同的方法。这意味着为了给出正确的答案,我们必须知道OP是如何调用所有这些函数的。也就是说,当您Object
是函数而不是对象时。使用new
进行尝试。我想这就是你想要展示的:(令人惊讶地工作)@Neal:当你调用var obj=new Object()时;obj.bar();obj.naba()
然后它就会起作用,因为这个
总是引用obj
@Neal:拜托,我们的评论之间已经有25秒了。你检查过我每10秒刷新一次页面吗?;)@尼尔:是的,你的例子更好,但答案中的代码还是一样的。。。谢谢
function SomeObject() {
this.foo = 0;
this.bar = function () {
this.naba = function () {
alert(this.foo); // this works!
}
}
}