面试题答案
一键面试常用属性及获取修改方式
- name 属性
- 获取:在 JavaScript 中,函数有一个
name
属性,用于获取函数的名称。例如:
- 获取:在 JavaScript 中,函数有一个
function myFunction() {}
console.log(myFunction.name);
- 说明:该属性返回函数声明时的名称,对于匿名函数赋值给变量的情况,
name
属性返回变量名。对于箭头函数,name
属性返回定义时的函数名(如果有),否则为箭头函数赋值的变量名。
- length 属性
- 获取:通过函数的
length
属性获取函数定义的参数个数。例如:
- 获取:通过函数的
function add(a, b) {
return a + b;
}
console.log(add.length);
- 说明:该属性返回函数预期传入的参数个数,不包括剩余参数。
- 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');
};
- caller 属性(非严格模式下)
- 获取:在非严格模式下,函数内部可以通过
caller
属性获取调用当前函数的函数。例如:
- 获取:在非严格模式下,函数内部可以通过
function outer() {
inner();
}
function inner() {
console.log(inner.caller);
}
outer();
- 说明:在严格模式下,访问
caller
属性会抛出错误。
利用属性实现自调用计数
- 使用闭包和自定义属性:
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
来记录函数的自调用次数。每次函数调用时,检查并更新该属性的值。