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是一个函数,但同时也拥有version和author两个属性,就像普通对象一样。
✅ 示例 2:利用函数属性实现计数器
function counter() {
counter.count++;
console.log(`调用次数: ${counter.count}`);
}
// 初始化计数属性
counter.count = 0;
counter(); // 调用次数: 1
counter(); // 调用次数: 2
counter(); // 调用次数: 3
📌 这种方式可以避免使用全局变量,将状态“附着”在函数自身上。
✅ 示例 3:函数的内置属性(如 name、length)
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 = {})。 - 内置属性如
name、length、prototype等也属于函数的属性。 - 常用于缓存、计数、元数据存储等场景。

浙公网安备 33010602011771号