How to implement this pattern in Lua with Cocos2d-x

I wanna call GameScene setSpecificSquare function in Square, it will occur ‘attempt to index field ‘squares’’ error. In my understanding, require(“GameScene”) in onTouchEnded(touch event) do not get the last variable of GameScene, it has not been constructed, so it does not have squares attribute. How to call GameScene “static” function setSpecificSquare in Square? Or in other word, how to get the last GameScene so I can set self.squares table? By the way, I have ignored the irrelevant code.

Thanks in advanced!! :slight_smile:

Square.lua

require "Cocos2d"
require "Cocos2dConstants"

        local Square = class("Square",function()
            return cc.Node:create()
        end)

        function Square.create()

            local square = Square.new()

            return square
        end

        function Square:ctor()
            self.bg = cc.Sprite:create("square_bg.png")
            self:addChild(self.bg)
            self.isHighlight = true
            local function onTouchEnded(touch,event)
              --occur error here
              require("GameScene"):setSpecificSquare()
            end
        end

return Square

GameScene.lua

require "Cocos2d"
require "Cocos2dConstants"

local GameScene = class("GameScene",function()
    return cc.Scene:create()
end)

function GameScene.create()
    local scene = GameScene.new()
    return scene
end


function GameScene:ctor()
    self.visibleSize = cc.Director:getInstance():getVisibleSize()
    self.x = cc.Director:getInstance():getVisibleOrigin().x
    self.y = cc.Director:getInstance():getVisibleOrigin().y

    self.squares = {}
    for i=0, 5 do
        self.squares[i] = {}    -- create a new row
        for j=0, 5 do
            self.squares[i][j] = nil
        end
    end
    --add layer
    self.bombLayer = cc.Layer:create()
    self:addChild(self.bombLayer)

    --add squares
    self:addSquares()
end

function GameScene:addSquares()

    for i=0,5 do
        for j=0,5 do
            local square = require("src/Square"):create()
            square:setPosition(0+j*70,0+i*70)

            self.bombLayer:addChild(square)

            self.squares[i][j] = square

        end
    end

end

function GameScene:setSpecificSquare()
--can not access self.square here, occur attempt to index field 'squares' error
self.square[0][0].isHighLight
end

return GameScene

require("GameScene") only loaded module,and only trigger

local GameScene = class("GameScene",function()
    return cc.Scene:create()
end)

Try use this codes:
require("GameScene").create():setSpecificSquare()