Yan Cui
I help clients go faster for less using serverless technologies.
This is a neat trick I picked up the other day, you can create a dynamic class which takes in a set of properties in the constructor and dynamically generates Accessor and/or Mutation methods (you just have to choose which lines to leave out):
function DynamicClass(properties) { // store class scope into a local variable var _this = this; for (var i in properties) { (function (i) { // create access method _this["get" + i] = function () { return properties[i]; }; // and mutation method, delete to make the class immutable _this["set" + i] = function (value) { properties[i] = value; } })(i); } }
In your calling code, you can then create a new class like this, just define and provide the value for the properties you want to add to the class in the constructor call:
var obj = new DynamicClass({ Name: "Dusty", Breed: "Highland Terrier", Age: 2 });
If you had added the mutation as well as the accessor methods, you’d be able to use them once the object has been created:
obj.setAge(3); alert("Name: " + obj.getName() + ", Age: " + obj.getAge() + ", Breed:" + obj.getBreed());
Better still, if you’re using Visual Studio by any chance, intellisense will be able to pick up the dynamically generated get/set methods on your new dynamic class:
Whenever you’re ready, here are 3 ways I can help you:
- Production-Ready Serverless: Join 20+ AWS Heroes & Community Builders and 1000+ other students in levelling up your serverless game. This is your one-stop shop for quickly levelling up your serverless skills.
- I help clients launch product ideas, improve their development processes and upskill their teams. If you’d like to work together, then let’s get in touch.
- Join my community on Discord, ask questions, and join the discussion on all things AWS and Serverless.
Interesting. But intellisense can’t handle more complex object like this
{
Name: “Dusty”,
Breed: “Highland Terrier”,
Age: 2,
ComplexObject: {prop1 : 1,prop2 : “2”,prop3 : new Date()}
}
And it can’t detect types for dynamically generated accessors(obj[‘Name’].contructor == String).