MST
星途 面试题库

面试题:JavaScript 中函数的常见属性及如何管理

请列举 JavaScript 函数常用的属性,并说明如何在代码中获取和修改这些属性。例如,如何获取函数的名称属性,以及如何利用属性来实现一些特定功能,如函数的自调用计数。
43.8万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

常用属性及获取修改方式

  1. name 属性
    • 获取:在 JavaScript 中,函数有一个 name 属性,用于获取函数的名称。例如:
function myFunction() {}
console.log(myFunction.name); 
  • 说明:该属性返回函数声明时的名称,对于匿名函数赋值给变量的情况,name 属性返回变量名。对于箭头函数,name 属性返回定义时的函数名(如果有),否则为箭头函数赋值的变量名。
  1. length 属性
    • 获取:通过函数的 length 属性获取函数定义的参数个数。例如:
function add(a, b) {
    return a + b;
}
console.log(add.length); 
  • 说明:该属性返回函数预期传入的参数个数,不包括剩余参数。
  1. prototype 属性
    • 获取:所有函数都有 prototype 属性,它是一个对象,用于定义构造函数的实例共享的属性和方法。例如:
function Person() {}
Person.prototype.age = 30;
console.log(Person.prototype.age); 
  • 修改:可以为 prototype 对象添加、修改属性和方法。例如:
function Animal() {}
Animal.prototype.speak = function() {
    console.log('I am an animal');
};
// 修改 speak 方法
Animal.prototype.speak = function() {
    console.log('New way of speaking');
};
  1. caller 属性(非严格模式下)
    • 获取:在非严格模式下,函数内部可以通过 caller 属性获取调用当前函数的函数。例如:
function outer() {
    inner();
}
function inner() {
    console.log(inner.caller); 
}
outer();
  • 说明:在严格模式下,访问 caller 属性会抛出错误。

利用属性实现自调用计数

  1. 使用闭包和自定义属性
function counterFunction() {
    if (!counterFunction.count) {
        counterFunction.count = 1;
    } else {
        counterFunction.count++;
    }
    console.log(`This function has been called ${counterFunction.count} times`);
}
counterFunction();
counterFunction();

在上述代码中,通过为 counterFunction 函数添加自定义属性 count 来记录函数的自调用次数。每次函数调用时,检查并更新该属性的值。