`local self` will be overridden by scoped self... use some other local, like `local SkullMe = SkullMe` ... hell there's very little reason to have the addon in the global scope in the first place, especially come 3.3 which we may have tomorrow.
Phanx, your second and third examples will fail because the function doesn't exist when you set the script. Rejigger the order and you'll be fine.
OP, while using self is good for speed, adding a function call just to get it assigned implicitly negates any performance boost you get from using self. Simply put, it's an unnecessary, wasteful call. Your first priority with OnUpdates should always be to make them as fast as possible, do as little as you can in the call.