javascript之修改 this指向的三种方法

    xiaoxiao2022-07-14  207

    1.call 语法 var obj={name:“zs”,sex:“男”,fn:function(){console.log(this.name)}} var obj1={name:“ls”} obj.fn.call(obj1,参数1,参数2,参数3) 此时在添加了call方法后原本obj里面的fn函数里面打印”this.name"的“this”指向由指向obj变为指向obj1,也就是说在call方法括号里,第一个对象用来接收后面的额参数,this指向这个对象。 ps:当第一个参数为null、undefined的时候,默认指向window。 2.apply 语法 obj.fn.apply(obj1,[参数1,参数2,参数3]) apply方法与call方法的区别在于,apply方法的第二个参数为数组,数组内可以是传递的参数,同样,用这个方法可以使原本指向obj的this改变指向为obj1;appy(ar,ar),apply方法括号内的参数可以是两个参数,this还是指向其本身,可以通过Math.max和Math.min数学方法求出数组的最大值和最小值。 ps:当第一个参数为null、undefined的时候,默认指向window。 3.bind 语法 var fn=obj.fn.bind(obj1); fn(); 和call很相似,第一个参数是this的指向,从第二个参数开始是接收的参数列表。区别在于bind方法返回值是函数以及bind接收的参数列表的使用。 bind返回值是函数 bind 方法不会立即执行,而是返回一个改变了上下文 this 后的函数。而原函数 中的 this 并没有被改变。 call、apply和bind函数存在的区别:

    bind返回对应函数, 便于稍后调用; apply, call则是立即调用。 ##基于原型链的继承 各个数据类型对象上都有一个prototype属性,表示为他的原型。然后这些类型的实例都可以继承此原型上的属性和方法。实例对象能够访问构造他的抽象类型(构造函数)原型上的属性和方法。

    最新回复(0)