【发布时间】:2011-04-21 23:59:58
【问题描述】:
String.prototype.foo = {};
String.prototype.foo.bar = function() {
//How can you reference the "grandparent" string?
console.log(this.parent.parent); //obviously, doesn't exist
}
如"Hello, Nurse!".foo.bar() 会记录“你好,护士!”。
如果对 foo 有控制权,会有什么不同吗?
编辑:那里,foo 被定义了。
Edit2:很好,而不是this.this.this,this.parent.parent。当然 parent 不存在,但希望现在语义不会妨碍。
Edit3:没有具体案例。提供的详细信息几乎就是我得到的所有信息:有一个对象 foo,它是原型的一部分。 foo.bar 是foo 的一个方法,应该访问它的祖父母。而已。没有其他的。这就是我掌握的所有信息。
Edit4:已解决。根据提供的答案(以及 Douglas Crockford 提供的一些二手帮助):
String.prototype.foo = function() {
var that = this;
return {
bar : function() {
console.log(that.valueOf());
}
}
}
//Called:
"Hello, Nurse!".foo().bar();
【问题讨论】:
-
同样的效果,this.this.this不起作用。
-
this是仍然自己,而不是父母。 -
@Zirak:我曾经在国外进过一家店,不知道“西红柿”这个词。所以我只是耸了耸肩,转而要草莓,希望店主知道我的意思。它并没有真正起作用。
-
@Zirak:如果你知道这里什么是相关的,什么是不相关的,那么你应该能够自己回答这个问题,嗯? :)
-
顺便说一下,这并不总是 self,它是函数执行的上下文。如果您使用 call 和 apply 调用函数,则可以将其设置为任何值。
标签: javascript oop