JavaScript基础对象---Function

本文详细介绍了JavaScript中Function对象的实例属性与方法,包括length属性、name属性及apply、bind、call方法的使用方式与注意事项,帮助读者深入理解函数内部机制。
摘要由CSDN通过智能技术生成

一、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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值