[Core Javascirpt] Basic Metaprogramming: Dynamic Method

Somehow it looks like reflect in Java.

For example: We define an mothod on the Object, it called defineMethod(). It accepts two arguements, one is methodName andother is methodBody. 

Read More: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

Using defineProperty() method of Object object to create method.

复制代码
Object.prototype.defineMethod = function(methodName, methodBody){
  
  Object.defineProperty(this, methodName, {
    enumerable: true,
    configurable: true,
    value: methodBody
  });
}


var dog = {breed: "Shelty"};
dog.defineMethod("bark", function(){
  return "Woof!";
});
console.log(dog.breed);
console.log(dog.bark());


//"Shelty"
//"Woof!"
复制代码

 

More useful case:

复制代码
function User(){
  
  User.statuses = ["inactive", "active"];
  _.each(User.statuses, function(status){
    this.defineMethod("is"+status.capitalize(), function(){
      return this.status == status;
    })
  }, this);
}


var user = new User();
user.status = "active";

console.log(user.isActive());
console.log(user.isInactive());

//isActive() and isInactive() methods are created dynamcally during the running time.
复制代码

Library: lodash  and active-support.js

Read more: https://github.com/brettshollenberger/ActiveSupport.js/tree/master

https://egghead.io/lessons/core-javascript-basic-metaprogramming-dynamic-method

posted @   Zhentiw  阅读(378)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示