You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript:如何让对象兼具函数调用与属性访问功能?

实现兼具函数调用与属性访问的对象(类似jQuery $)

这个需求其实和jQuery的$实现思路完全一致,本质就是利用JS里函数本身也是对象的特性来玩的小技巧,我给你一步步拆解怎么实现:

核心实现代码

// 先定义一个函数,它就是我们要的"obj"
function obj() {
  // 调用obj()时返回一个自定义函数,这里可以根据你的需求修改返回逻辑
  return function() {
    console.log("我是obj()调用后返回的函数~");
  };
}

// 给这个函数挂载属性,就像给普通对象加属性一样
obj.x = 2;
obj.y = 4;

测试效果

试试执行下面的代码,完全符合你的需求:

// 调用obj(),得到返回的函数
const fn = obj();
fn(); // 输出:我是obj()调用后返回的函数~

// 访问obj的属性
console.log(obj.x); // 输出:2
console.log(obj.y); // 输出:4

原理说明

在JavaScript里,函数是一等公民,它的本质是Function类型的实例,而Function又继承自Object。这意味着:

  • 你可以像调用普通函数一样调用它(obj())
  • 你也可以像操作普通对象一样给它添加、修改、删除属性(obj.x = 2)

这正是jQuery中$的实现逻辑——$本身是一个用于选择DOM元素的函数,同时$.fn、$.ajax这些常用的属性/方法,都是直接挂载在$这个函数上的。

进阶写法:批量挂载属性

如果需要添加的属性很多,可以用Object.assign批量挂载,更简洁:

function obj() {
  return function() {
    console.log("返回的函数");
  };
}

// 批量添加属性和方法
Object.assign(obj, {
  x: 2,
  y: 4,
  // 还可以挂载自定义方法
  greet: function() {
    console.log(`x的值是${this.x},y的值是${this.y}`);
  }
});

// 测试自定义方法
obj.greet(); // 输出:x的值是2,y的值是4

内容的提问来源于stack exchange,提问作者number.okta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:43:29