在 javascript 中,函数确实是对象。它们是一等公民,拥有属性、方法,并且可以像普通对象一样被赋值给变量、作为参数传递或从函数中返回。

Function 原型链与 Object 的关系是什么
所有函数都继承自 Function.prototype,而该原型本身又是 Object 的实例,因此函数也是对象的一种特殊形式。

function myFunc() {
return "hello";
}
console.log(typeof myFunc); // "function"
console.log(myFunc instanceof Object); // true
console.log(myFunc instanceof Function); // true
console.log(Object.getPrototypeOf(myFunc) === Function.prototype); // true
console.log(Function.prototype.__proto__ === Object.prototype); // true运行上述代码后,控制台输出显示:
1. typeof myFunc 为 "function"。
2. myFunc instanceof Object 为 true。
3. myFunc instanceof Function 为 true。
4. Object.getPrototypeOf(myFunc) 等于 Function.prototype。
5. Function.prototype.__proto__ 等于 Object.prototype。
立即学习“Java免费学习笔记(深入)”;
如何向函数添加自定义属性并访问它们
你可以直接通过点语法或方括号语法向函数对象添加属性,就像操作普通对象一样。

function calculator(a, b) {
return a + b;
}
calculator.version = "1.0";
calculator.author = "Dev";
console.log(calculator(2, 3)); // 5
console.log(calculator.version); // "1.0"
console.log(calculator.author); // "Dev"运行上述代码后,控制台输出显示:
1. calculator(2, 3) 返回数字 5。
2. calculator.version 返回字符串 "1.0"。
3. calculator.author 返回字符串 "Dev"。
当函数作为对象存储在数组中时,其属性是否保留
是的,当函数被存储在数组或其他数据结构中时,它依然保持对象特性,其附加的属性不会被丢失。
const funcs = [function add(x, y) { return x + y; }];
funcs[0].name = "addition";
console.log(funcs[0](10, 20)); // 30
console.log(funcs[0].name); // "addition"运行上述代码后,控制台输出显示:
1. funcs[0](10, 20) 返回数字 30。
2. funcs[0].name 返回字符串 "addition"。


















