OOP object not properly creating?

Hi,

I’m learning OOP and trying to create an object named Data that handles data. But I can’t seem to figure how to properly set it’s elements so that they could be obtainable in other functions with self.

Any help much appreciated! :slight_smile:

Module:

local Data = {}
Data.__index = Data

function Data.New(Player, Name)
	
	print("creating data for " .. Player.Name)
	local NewData = {}
	setmetatable(NewData, Data)
	
	NewData.Player = Player
	print("data for " .. Player.Name .. " created")
	
	return NewData
	
end

function Data:GetData()
	
	print("getting data for " .. self.Player.Name) -- ERROR: attempt to index nil with 'Player'
	
end

return Data

Script:

local Players = game:GetService("Players")
local Data = require(script.Data)

local DataObjects = {}

local function PlayerAdded(Player)
	
	local PlayerData = Data.New(Player, "PlayerData")
	
	print(PlayerData.Player.Name) -- prints just fine
	PlayerData.GetData() -- function doesn't see PlayerData object elements, thus errors?
	
	DataObjects[Player.UserId] = PlayerData
	
end

Players.PlayerAdded:Connect(PlayerAdded)
1 Like

Methods defined with : are also called with :. It’d be PlayerData:GetData().

1 Like