javascript面向对象精要学习总结(第二章 函数)

本文深入探讨JavaScript函数的各种特性,包括函数作为对象的本质、参数处理、变量提升现象、this指向及如何通过call、apply、bind方法改变this指向。通过具体代码示例,详细解析了函数在JavaScript中的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数也是对象,但一点不同
  • 函数存在一个 call 的内部属性,表明函数可执行
  • typeof 对任何具有call属性的对象,都返回“function”
function fun(){
  console.log(typeof fun.call);
}
fun()
函数的参数
  • 函数的length属性,即为参数的个数
  • 函数中,arguments.length,也表示参数的个数
  • js中函数没有重载,但可以通过参数个数的不同来实现
  • 检查参数是否为未定义时,不要用arguments.length===0
function fun(a,b){
  console.log(arguments.length);
  console.log(fun.length);
}
console.log(fun.length);
fun(1,2)
函数的变量提升
  • 使用var关键字(函数表达式),没有变量提升效果
  • 不同于函数表达式,函数声明则可以提升
console.log(fun1);//undefined
var fun1 = function fun1(){
  console.log(fun1.name);
}
理解【函数就是值】
this指向的是对象
  • 只有对象实例的方法,this才表示该对象
  • 如果是函数,内部的this指向函数外层,一般为window
改变this,call、apply、bind
  • call的参数,第一个为绑定对象,第二个往后均为参数
  • apply的参数,第一个为绑定对象,第二个为所有参数组成的数组
  • bind的参数,同call
function sayAge(name){
  console.log(name + " "+this.age);
  console.log(name + " "+this.name);
}
var gs = {
  age:19,
  name:"gs"
}
var zk = {
  age:23,
  name:"zk"
}
var age = 100;
var name = "lili"
//call
// console.log(sayAge.call(gs,"gs"));
// console.log(sayAge.call(zk,"zk"));
// console.log(sayAge.call(this,"default"));
//apply
// console.log(sayAge.apply(gs,["gs"]));
// console.log(sayAge.call(zk,["gs"]));
// console.log(sayAge.call(this,["default"]));
//bind
var sayAgeOfGs = sayAge.bind(gs);
console.log(sayAgeOfGs("gs"));
var sayAgeOfZk = sayAge.bind(zk,"zk");
console.log(sayAgeOfZk());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值