JavaScript函数进阶(四)

函数对象

1.函数属性
①length属性
·在函数体里,arguments.length表示传入函数的实参的个数。
·而函数本身的length属性是只读的,它代表函数声明的实际参数的数量。

function fn(a, b) {
    console.log(arguments.length);
    console.log(fn.length);
    console.log(arguments.callee.length);
  }
  fn(1, 2, 3, 4, 5);
  

②prototype属性
·每一个函数都包含一个prototype属性,这个属性是指向一个对象的引用,这个对象称做"原型对象"(prototype object)。每一个函数都包含不同的原型对象。当将函数用做构造函数的时候,新创建的对象会从原型对象上继承属性。

③自定义属性
·函数是一种特殊的对象,可以拥有属性。

javascript
function fx(a, b) {
    if (fx.count) fx.count++;
    else fx.count = 1;  return a + b;
  }
  fx(1, 2);fx(2, 3);fx(3, 4);fx(4, 5);
  console.log(fx.count);
  

2.函数方法
. ①call()和apply()方法
·通过调用方法的形式来间接调用函数。
·call()和apply()的第一个实参是要调用函数的主体对象,它是调用上下文,在函数体内通过this来获得对它的引用。

②bind()方法
·将函数绑定至某个对象,且可以绑定参数值。
·当在函数f()上调用bind()方法并传入一个对象o作为参数,这个方法将返回一个新的函数。
·(以函数调用的方式)调用新的函数将会把原始的函数f()当做o的方法来调用。
·传入新函数的任何实参都将传入原始函数。
·通过bind()为函数绑定调用上下文后,返回的函数不能通过call和apply修改调用上下文对象。

bind()方法示例

  let obj = {
      x: 10,
      show: function (y) {
        let r = "";
        for (let i = 0; i < y; i++) {
          r += this.x + " ";
        }
        console.log(r);
      },
    };
    obj.show(4);
    let ss = obj.show.bind({ x: 1000 });
    ss(3);
    ss.call({ x: 2000 }, 3);

bing()应用举例

let obj = { z: 1000 };
function sum(x, y) {
  let r = x + y;
  if (Object.getPrototypeOf(this) != window) {
    console.log(this);  r += this.z;
  }
  return r;
}
obj.sum = sum;
console.log(obj.sum(20, 30));
console.log(obj.sum.call({ z: 1 }, 2, 3));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值