JavaScript 中,函数可以像普通对象一样拥有属性

在 JavaScript 中,函数是一等对象(first-class objects),这意味着函数不仅可以被调用,还可以像普通对象一样拥有属性和方法。下面通过几个例子来说明“函数中有属性”这一特性。

✅ 示例 1:给函数添加自定义属性

function greet() {
  console.log("Hello!");
}

// 给函数添加属性
greet.version = "1.0";
greet.author = "Alice";

console.log(greet.version); // 输出: "1.0"
console.log(greet.author);  // 输出: "Alice"

greet(); // 调用函数本身
💡 这里 greet 是一个函数,但同时也拥有 versionauthor 两个属性,就像普通对象一样。

✅ 示例 2:利用函数属性实现计数器

function counter() {
  counter.count++;
  console.log(`调用次数: ${counter.count}`);
}

// 初始化计数属性
counter.count = 0;

counter(); // 调用次数: 1
counter(); // 调用次数: 2
counter(); // 调用次数: 3
📌 这种方式可以避免使用全局变量,将状态“附着”在函数自身上。

✅ 示例 3:函数的内置属性(如 namelength

JavaScript 函数自带一些标准属性:
function add(a, b) {
  return a + b;
}

console.log(add.name);    // "add" —— 函数名
console.log(add.length);  // 2 —— 形参个数
这些是函数对象的只读内置属性

✅ 示例 4:函数作为构造器时的 prototype 属性

function Person(name) {
  this.name = name;
}

Person.prototype.sayHi = function() {
  console.log(`Hi, I'm ${this.name}`);
};

const p = new Person("Bob");
p.sayHi(); // Hi, I'm Bob

// prototype 也是函数的一个属性
console.log(Person.prototype); // { sayHi: [Function], constructor: [Function: Person] }
⚠️ 注意:prototype 属性仅在函数被用作构造函数时才有特殊意义。

总结

  • 函数是对象 → 可以拥有属性。
  • 可以手动添加自定义属性(如 fn.cache = {})。
  • 内置属性如 namelengthprototype 等也属于函数的属性。
  • 常用于缓存、计数、元数据存储等场景。
posted @ 2026-01-20 09:38  chenlight  阅读(1)  评论(0)    收藏  举报