I've few variables that are of type number
(or for that matter strings too).
I want add some metadata to these variables.
When I try to use Object.defineProperty(myvar, "prop", {/*getter & setter*/})
it gives an error that myvar is not an object.
How can I define a property on non-objects with getter and setter methods?
I don't want to add anything to Number.prototype
because I want these properties only on few variables.
You can do this by prototypal inheritance.
Using Number.prototype
like this:
var proto = Object.create(Number.prototype);
function MyNumber() {
}
MyNumber.prototype = proto;
MyNumber.prototype.constructor = MyNumber;
MyNumber.prototype.someOwnMethod = function () {
}
// and so on
var myVar = new MyNumber();
Object.defineProperty(myvar, "prop", {/*getter & setter*/});
You'll get an Object in prototypes along with methods of Number.
Or if you do not need any own methods, just use Number
constructor instead of number literal.
var myVar = new Number();
Object.defineProperty(myvar, "prop", {/*getter & setter*/});
The same for strings:
var myVar = new String();