我有两个对象,即
var Parent = { };
var Child = {
born : function () {
Parent.beHappy = this.study;
},
study : function () {
console.log("Studying!");
console.log("Now I'm going to play");
this.play();
},
play : function () {
console.log("Playing!");
}
}
现在,我正在做的是
Child.born();
Parent.beHappy();
正如您所看到的,Parent.beHappy()
调用了study
子方法。现在我遇到的问题是,在study
方法中,我无法调用this.play()
。原因是,为什么会这样,因为在study()
上调用了Parent
,因此this
在这里指的是Parent
而不是Child
。我有什么方法可以this
方法study
总是引用Child
而不是Parent
?我知道我可以在Child.play()
方法中study
使其正常工作,但我希望在我的代码中保持一致,并且更喜欢this
。此外,我可以$.proxy(Parent.beHappy, Child)()
,但我不想更改此Parent.beHappy()
函数调用,因为它将由最终用户使用。我已经尝试了所有的东西,但现在我已经没有想法了。任何建议都将受到高度赞赏。
答案 0 :(得分:3)
使用.bind()
js方法设置上下文:
Parent.beHappy = this.study.bind(this);
或者为了支持更旧的浏览器,请使用jQuery $ .proxy():
Parent.beHappy = $.proxy(this.study, this);
var Parent = { };
var Child = {
born : function () {
Parent.beHappy = $.proxy(this.study, this);
},
study : function () {
snippet.log("Studying!");
console.log("Studying!");
console.log("Now I'm going to play");
snippet.log("Now I'm going to play");
this.play();
},
play : function () {
console.log("Playing!");
snippet.log("Playing!");
}
}
Child.born();
Parent.beHappy();

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;