当前位置: 首页 > Web前端 > HTML

This

时间:2023-04-02 20:07:27 HTML

方法调用方式和函数调用方式分别是什么调用方式?设置为对象属性的函数称为方法。通过对象调用时,就是this的方法调用方式。在方法调用方式下,函数中的this指向函数所属的对象。函数调用方式当函数不是对象的属性,而是作为函数直接调用时,就是函数调用方式。在此模式下调用函数时,this将绑定到全局对象。这是语言设计中的错误。如果语言设计正确,那么当调用内部函数时,this仍然应该绑定到外部函数的this变量上。这个设计错误的后果是方法不能使用内部函数来帮助它工作,因为内部函数的this被绑定到错误的值,所以方法对对象的访问不能共享varobj={val:1、show:function(){alert(this.val);},//方法调用方式outFunc:function(){functioninnerFunc(){console.log(this);}innerFunc();//函数调用方式}};obj.innerFunc();//在严格模式下,console.log(this)中的this是未定义的,//否则,console.log(this)中的this是全局对象(浏览器中的window)//下面解释为什么构造函数callpattern当用new调用一个函数时,就是构造函数模式。当用new调用时,会发生这些事情:创建一个连接到函数原型的新对象将this绑定到创建的新对象当函数结束时,如果没有返回其他对象,它将返回this,即新创建的对象。varquo=function(string){this.status=string;}quo.prototype.get_status=function(){returnthis.status;}varqq=newquo("aaa");alert(qq.get_status());上下文调用模式(call,apply)varmyobject={};varsum=function(a,b){  returna+b;};varsum2=sum.call(我的对象,10,30);//varsum2=sum.apply(myobject,[10,30]);警报(sum2);其实我们常见的调用方式是这样的:func(p1,p2)obj.child.method(p1,p2)都是语法糖,可以等价改成调用形式func.call(undefined,p1,p2)obj.child.method.call(obj.child,p1,p2);浏览器有一个规则:如果你传递的context只是null或者undefined,那么window对象就是默认context(严格模式下,默认context是undefined)案例分析事件监听内部调用方法vardiv=document。getElementById("一个");functionf2(){console.log(this)}div.onclick=function(){console.log(this)//那个节点f2()//window(函数调用方式)}