一、Function实例属性
1.length属性:指明函数的形参个数
形参的数量不包括剩余参数个数,仅包括第一个具有默认值之前的参数个数
console.log(Function.length); // 1
console.log(Function.prototype.length); // 0
console.log((function() {}).length); // 0
console.log((function(a) {}).length); // 1
console.log((function(a, b) {}).length); // 2
console.log((function(...args) {}).length); // 0, 其余参数不会被计入
// 0, rest parameter is not counted
console.log((function(a, b = 1, c) {}).length); // 1, 仅包括第一个具有默认值之前的参数个数
console.log((function(a = 1, b, c) {}).length); // 0
console.log((function(b, a = 1, c) {}).length); // 1
console.log((function(b, c, a = 1) {}).length); // 2
2.function.name 属性返回函数实例的名称
let o = {
get foo(){},
set foo(x){}
};
let descriptor = Object.getOwnPropertyDescriptor(o, "foo");
console.log(descriptor.get.name); // "get foo"
console.log(descriptor.set.name); // "set foo";
二、Function实例方法
1.apply() 方法调用一个函数, 其具有一个指定的this值,以及作为一个数组(或类似数组的对象)提供的参数
语法:func.apply(thisArg, [argsArray])
参数:
thisArg 可选的,在 func 函数运行时使用的 this 值
需要注意的是,使用的 this 值并不一定是该函数执行时真正的 this 值,如果这个函数处于非严格模式下,则指定为 null 或 undefined 时会自动替换为指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this会指向该原始值的包装对象
argsArray 可选的,一个数组或者类数组对象,其中的数组元素将作为单独的参数传给 func 函数
如果该参数的值为null 或 undefined,则表示不需要传入任何参数。从ECMAScript 5 开始可以使用类数组对象
let numbers = [5, 6, 2, 3, 7];
let max = Math.max.apply(null, numbers); // 7
let min = Math.min.apply(null, numbers); // 2
console.log(max,min);
2.bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列
语法:fun.bind(thisArg[, arg1[, arg2[, ...]]])
参数:
thisArg
当绑定函数被调用时,该参数会作为原函数运行时的 this 指向
arg1, arg2, ...
当绑定函数被调用时,这些参数将置于实参之前传递给被绑定的方法
返回值:返回由指定的this值和初始化参数改造的原函数拷贝
let object = {
x: 9
};
let module = {
x: 81,
getX: function (){
return this.x;
}
};
console.log(module.getX()); // 81
let retrieveX = module.getX.bind(object);
console.log(retrieveX()); // 9
3.call() 方法调用一个函数, 其具有一个指定的this值和分别地提供的参数(参数的列表)
语法:fun.call(thisArg, arg1, arg2, ...)
参数:
thisArg 在fun函数运行时指定的this值
需要注意的是,指定的this值并不一定是该函数执行时真正的this值,如果这个函数处于非严格模式下,则指定为null和undefined的this值会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this会指向该原始值的自动包装对象
arg1, arg2, ... 指定的参数列表
function Product(name, price) {
this.name = name;
this.price = price;
}
function Food(name, price) {
Product.call(this, name, price);
this.category = 'food';
}
console.log(new Food('cheese', 5).name); // cheese
本文详细介绍了JavaScript中Function对象的实例属性与方法,包括length属性、name属性及apply、bind、call方法的使用方式与注意事项,帮助读者深入理解函数内部机制。
339

被折叠的 条评论
为什么被折叠?



