castl
castl copied to clipboard
How to setmetatable for an Object
I want override the default toString
in both lua and js.
So normally I could do that in JavaScript with the Object.setPrototypeOf
function, which finally call Object.defineProperty
after babel-transformation
, to change the proto chain .
However, I found that castl
defines the Object.defineProperty
with rawset
, and also does not expose the setmetatable
function.
So I'd like to ask how can I make use of the custom toString
and __tostring
in both lua
and javascript
An example code would be like this:
const util = require("util") // also as a custom runtime-lib for lua
const version = {
major: 1,
minor: 2,
patch: 2
}
Object.setPrototypeOf(version, {
toString() {
return util.format("%d.%d.%d%s", this.major, this.minor, this.patch, this.pre_release ? this.pre_release : "")
}
})
module.exports = {
_NAME: "sample-project",
_VERSION: "" + version,
_VERSION_TABLE: version
}