改变this的指向

一、this

一般情况下,this是在运行时动态指定的,指向调用它的对象。

在箭头函数中,没有自己的this值,它的this值继承自父作用域,是词法作用域,在定义的时候就被指定了,之后也不变。

二、call、apply、bind的相同点

1、都是用来改变函数的this指向的,执行目标函数的时候把目标函数的this执向改一下,并不会改变原函数的指向

	function fn() {
		console.log(this);
	}
	var obj = {
		a:[4,5,6],
		b:[7,8],
	};
	fn.apply(obj);        // {a: Array(3), b: Array(2)}
	var f = new fn();     // { }
	fn.call(obj);         // {a: Array(3), b: Array(2)}
	var f2 = new fn();    // { }
	fn.bind(obj)();       // {a: Array(3), b: Array(2)}
	var f3 = new fn();    // { }

  

2、第一个参数都是this要指向的对象

3、都可以利用后续参数传参

三、call、apply、bind的区别

1、call和apply都是对函数直接调用,而bind方法返回的是一个函数,还需要()来进行调用。

2、call是一个个的传参,apply是以数组的形式进行传参,bind也是一个个的传参。

fn.call(target_object,name1,name2)

fn.apply(target_object,[name1,name2])

fn.bind(target_object,name1,name2)()

fn.bind(targe_object)(name1,name2)

原文地址:https://www.cnblogs.com/1220x/p/11734884.html

时间: 2024-10-12 10:52:11

改变this的指向的相关文章

JavaScript中改变this的指向方法(call和apple)

1.方法定义 call方法:语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象. 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj apply方法: 语法:apply([thisObj[,argArray]]) 定

12.10 改变this的指向

1.解决函数内this指向 1.可以在函数外提前声明变量_this/that=this 2.通过apply和call来修改函数内的this指向 (1)二者区别   用法是一样的,就是参数形式不一样    fn.call(obj,a,b)/fn.apply(obj,[a,b]) (2)二者代表的是将函数内的this换成obj之后把fn调用 3.bind修改函数内的this fn.bind(obj,a,b)只是替换了this但是不调用fn,返回的还是函数 fn.bind(obj,a,b)() 2.

react的事件处理为什么要bind this 改变this的指向?

react的事件处理会丢失this,所以需要绑定,为什么会丢失this? 首先来看摘自官方的一句话: You have to be careful about the meaning of this in JSX callbacks. In JavaScript, class methods are not bound by default. 这句话大概意思就是,你要小心jax回调函数里面的this,class方法默认是不会绑定它的 让我十分疑惑,在我的知识范围理解中,class是es6里面新增

函数中,对形参做不加var的全局溢出赋值,可改变形参所指向的实参的本身值

var formateNumArr = function(arr,defaultVal){    var a = [];    $.each(arr,function(i,v){        if(!isNaN(v)){            a.push(v);        }else{            a.push(defaultVal);            arr[i] = '';//对不合法数据进行清空处理        }    });    return a;}var

向null地址copy数据和不断改变指针指向

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h> int main11(){ system("pause"); return 0;} void main22(){ char *p1 = NULL; p1 = 0x00077; strcpy(p1, "11111222"); system("pause&q

可以改变this指向的方法

this一般指向的是当前被调用者,但也可以通过其它方式来改变它的指向,下面将介绍三种方式: 1.call用作继承时: function Parent(age){ this.name=['mike','jack','smith']; this.age=age; } function Child(age){ Parent.call(this,age);//把this指向Parent,同时还可以传递参数 } var test=new Child(21); console.log(test.age);/

javascript 切换上下文,事件绑定中改变this指向

在事件绑定中,调用回调函数时改变this的指向,通常有几种做法,原生的bind()方法,和jquery中的$.proxy().如果在事件绑定中,想让上下文从目标html元素中切换为局部变量,就可以这样做. 两个例子: ① func.bind(obj); 参数: func ,要调用的函数对象,必选 obj ,this 关键字可在新函数中引用的对象,必选 返回: 与 func 函数相同的新函数 new function(){ this.appName = "wem"; document.d

改变函数中的 this 指向——神奇的call,apply和bind及其应用

在JavaScript 中,call.apply 和 bind 是 Function 对象自带的三个方法,这三个方法的主要作用是改变函数中的 this 指向,从而可以达到`接花移木`的效果.本文将对这三个方法进行详细的讲解,并列出几个经典应用场景. 1.call(thisArgs [,args...]) 该方法可以传递一个thisArgs参数和一个参数列表,thisArgs 指定了函数在运行期的调用者,也就是函数中的 this 对象,而参数列表会被传入调用函数中.thisArgs 的取值有以下4

改变this指向的call,apply,bind方法

var a = { user:"bgg", fn:function(){ console.log(this.user); } } var b = a.fn; b(); //undefined 我们是想打印对象a里面的user却打印出来undefined是怎么回事呢?如果我们直接执行a.fn()是可以的. 但是有时候我们不得不将这个对象保存到另外的一个变量中,那么就可以通过以下方法. 1.call() var a = { user:"bgg", fn:function