JS 函数中的call和apply方法

function People(hobby) {
     this.name="mike";
     this.age=12;
     this.hobby=hobby;
     this.fun=function (){
 
     }
}
 var obj={};
 var obj2={};
 function Sun (){
     People.call(this,"swim");
     People.call(obj,"running");//call方法传递实参直接写
     People.apply(obj2,["hiking"]) //apply方法传递实参需要用arguments

 }
 var a=new  Sun ()//实例化Sun
 console.log(a);// {name: "mike", age: 12, hobby: "swim", fun: ƒ}
 console.log(obj);//{name: "mike", age: 12, hobby: "running", fun: ƒ}
 console.log(obj2);//{name: "mike", age: 12, hobby: "hiking", fun: ƒ}



总结:
当在函数内部使用call调用People函数时,People函数原来的this指向People函数里的狭义对象,而在Sun中使用call方法时,this指向当前Sun狭义对象,相当于对原来的this重新赋值,this=this(Sun) 如果调用People不传实参,则相当于直接调用People函数,此时Sun函数中name,age属性和一个方法,如果传入实参,则Sun函数里有三个属性一个方法。

apply方法传递实参需要用arguments,用法和call方法相同

call方法和apply第一个参数改变原函数this指向,第二个函数为调用函数时传入的实参(传参方式不同),this可以指向任何对象。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 10,232评论 0 5
  • 函数是一段可以反复调用的代码块。函数还能接受输入的参数,不同的参数会返回不同的值。 概述 函数的声明 JavaSc...
    oWSQo阅读 5,219评论 0 4
  • 函数只定义一次,但可能被执行或调用任意次。JS函数是参数化的,函数的定义会包括一个称为形参的标识符列表,这些参数在...
    PySong阅读 3,715评论 0 0
  • 欢乐颂已经接近尾声,樊胜美和王柏川的爱情即将修成正果,这时他们遇到了很多年轻人婚前遇到的问题,买房。 在售楼小姐提...
    不爱笑的猫i阅读 2,801评论 2 1
  • 马克吐温曾说过:“谁没有蘸着眼泪吃过面包,谁就不懂得什么是生活!” 学生时期的窘困,职场中的忍辱负重,爱情里的悲欢...
    瑾晞阅读 2,593评论 0 13

友情链接更多精彩内容