知识点:arguments和this对象、caller属性、apply()和call()方法
arguments对象:函数内部对象,传入函数中所有参数的集合,类数组对象
属性:callee 指针,指向拥有这个arguments对象的函数 作用:解耦
例子:迭代
function factorial(num) { if(num<=1){ return 1; }else{ return ( num*arguments.callee(num-1)); } } console.log(factorial(4));//24 this对象:函数内部对象,引用的是函数执行的环境对象 在全局作用域执行函数时this为全局对象(window) window.color=‘red‘; var o={color:‘blue‘,}; function sayColor(){alert(this.color);}; sayColor(); //red o.sayColor=sayColor; 0.sayColor();//blue 看this引用的谁 caller属性:指向调用当前函数的函数 保存着调用当前函数的函数的引用 function a(){ b(); } function b(){ alert(b.caller) } b();//输出a函数体 apply()和call(): 作用:修改函数this的指向(修改上下文),拓展函数的作用域,对象与方法解耦 区别:传参 apply(要修改的指向,参数数组/arguments对象) call(要求改成的指向,arg1,arg2...) 例子:哑巴说话
function PersonWei() { } PersonWei.prototype={ country:‘Wei‘, sayCountry:function () { console.log(‘I am form ‘+this.country); }, } var xuShu={ country:‘Shu‘, } var caoCao=new PersonWei(); caoCao.sayCountry();// I am form Wei caoCao.sayCountry.call(xuShu); //I am form Shu 不知道这样做合不合理,定义了一个表示魏国人的构造函数PersonWei(),它具有属性:country和方法sayCountry(),然后实例了一个caoCao(曹操),我们想要帮xuShu(徐庶)说出自己的国家:
caoCao.sayCountry.call(xuShu);让caoCao的this指向变为xuShu(借尸还魂?脑洞大开,应该就是鬼上身,借用你的身体来实现他的行为),这时候this.conutry 中的this指向的就是xuShu对象了,因此结果是 I am form Shu
时间: 2024-12-28 20:32:15