如何在Javascript中从内部var获取父类?

时间:2018-02-23 14:13:39

标签: javascript node.js web browser

我有这样的课程

class Game {
    constructor(player1, player2, gameId) {

        this.Clockk = {
            totalSeconds: timeForAnswer,
            nowSeconds: timeForAnswer,

            start: function () {
                var self = this;
                this.interval = setInterval(function () {
                    self.nowSeconds -= 1;
                    if (self.nowSeconds == 0) {

                          here I want to call "answered" function

                    }
            },

            reset: function(){
                this.nowSeconds = this.totalSeconds;
            },
        };

        answered(player) {
             console.log(player);
        }
    };

我想从Game变量调用this.Clockk类的函数。 变量中的this关键字本身就是this.Clockk,我怎样才能获得parrent类本身?

1 个答案:

答案 0 :(得分:1)

如果您使用this对象的方法,那么Clockk将引用Clockk对象,并且在Javascript中,没有自然的方式来引用&# 34;父"或者"包含"宾语。因此,您必须在某处存储对父级的引用。我可以想到两种直接的方式来存储它。一种是将其存储在父作用域中,另一种是将其存储在answered()对象本身的实例数据中。

仅供参考,我还假设answered()方法应该是Game对象的一种方法(你的问题中的代码并没有完全表明 - 但这似乎是意图)。

以下两种方法可以使用this.Clockk.start()方法调用父class Game { constructor(player1, player2, gameId) { // save parent reference here so child scopes can refer to it let parentObj = this; this.Clockk = { totalSeconds: timeForAnswer, nowSeconds: timeForAnswer, start: function () { var self = this; this.interval = setInterval(function () { self.nowSeconds -= 1; if (self.nowSeconds == 0) { // here I want to call "answered" function parentObj.answered(); } }, reset: function(){ this.nowSeconds = this.totalSeconds; }, }; } answered(player) { console.log(player); } } 方法:

在父作用域中保存父引用

Clockk

class Game { constructor(player1, player2, gameId) { this.Clockk = { // save parent reference in our own instance data parent: this, totalSeconds: timeForAnswer, nowSeconds: timeForAnswer, start: function () { var self = this; this.interval = setInterval(function () { self.nowSeconds -= 1; if (self.nowSeconds == 0) { // here I want to call "answered" function self.parent.answered(); } }, reset: function(){ this.nowSeconds = this.totalSeconds; }, }; } answered(player) { console.log(player); } } 实例数据

中保存父引用
Clockk

或者,您可以将class实现分解为其自己的{{1}}定义,然后您在其构造函数中将父项传递给它,然后其构造函数将存储父引用在其自己的实例数据中。