首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js call 和 apply

前言   call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。   ...call 和 apply二者的作用完全一样,只是接受参数的方式不太一样。...方法定义   apply   Function.apply(obj,args)方法能接收两个参数:     obj:这个对象将代替Function类里this对象   args:这个是数组或类数组,apply...call   call方法与apply方法的第一个参数是一样的,只不过第二个参数是一个参数列表   在非严格模式下当我们第一个参数传递为null或undefined时,函数体内的this会指向默认的宿主对象...,在浏览器中则是window var test = function(){ console.log(this===window); } test.apply(null);//true test.call

1.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

JS 手写: call、apply、bind

该方法的语法和作用与 apply() 方法类似,只有一个区别,就是 call() 方法接受的是一个参数列表,而 apply() 方法接受的是一个包含多个参数的数组。...# 返回值 使用调用者提供的 this 值和参数调用该函数的返回值。若该方法没有返回值,则返回 undefined。 # 描述 call() 允许为不同的对象分配和调用属于一个对象的函数/方法。...返回值 调用有指定 this 值和参数的函数的结果。 # 描述 在调用一个存在的函数时,可以为其指定一个 this 对象。 this 指当前对象,也就是正在调用这个函数的对象。...apply 可以使用数组字面量(array literal),如 fun.apply(this, ['eat', 'bananas']),或数组对象, 如 fun.apply(this, new Array...返回值 返回一个原函数的拷贝,并拥有指定的 this 值和初始参数。 # 描述 bind() 函数会创建一个新的绑定函数(bound function,BF)。

1.5K30

JS 的 call apply bind 方法

js的call apply bind 方法都很常见,目的都是为了改变某个方法的执行环境(context) call call([thisObj[,arg1[, arg2[,   [,.argN]]]]]...apply([thisObj[,arg1, arg2, argN]]) apply和call类似,区别只是第二个参数,是一个数组(或类数组)的形式 bind bind(thisArg [, arg1...[, arg2, …]]); bind 也是改变某个方法的执行环境,区别也在于第二个参数(也是一个个的参数形式)和“返回值”的特性。   ...如 func.call(func1,var1,var2,var3) 对应的apply写法为:func.apply(func1,[var1,var2,var3]) 对应的bind写法为: func.bind..._apply; } }; apply的模拟: apply也类似,因为第二个参数是类数组的形式,所以也要变换为数组 // 第二个参数 args是为了方便使用 Function.prototype.Apply

1.5K30

js中的call和apply

一、call和apply简介 call() 和 apply() 是预定义的函数方法。 两个方法可用于调用函数,两个方法的第一个参数必须是对象本身。 两个方法都使用了对象本身作为第一个参数。...两者的区别在于第二个参数: apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。...二、call和apply的相同点和不同点 1. 区别 call传递的参数是序列1,2,3,4 apply传递的参数是集合型[1,2,3,4] 2....相同点 call和apply是替换前面函数内部的this指针以及传递参数。 功能:可以自动执行前面的函数 都有两个参数:a. 替换的对象 b....function method(a,b,c){ console.log(this,a,b,c);//{name: "张三", age: 20} 1 2 3 } method.apply

1.5K30

js call()、apply()、bind()用法和区别

方法将一个函数的对象上下文从初始的上下文改变为由 thisArg 指定的新对象,如果没有提供 thisArg 参数,那么 Window对象被用作 thisArg; 将arg1等参数传递进fun函数中,返回fun函数的返回值...特性: fun.apply(thisArg,[arg1,arg2,…]) 会立即调用fun函数; apply方法将一个函数的对象上下文从初始的上下文改变为由 thisArg 指定的新对象,如果没有提供...thisArg 参数,那么 Window对象被用作 thisArg; 将数组传递进fun函数中,返回fun函数的返回值。...() apply 常用于与数组有关的操作,因为传递的参数是数组。...获取数组中的最大值与最小值: const arr = [1, 4, 7, -1]; Math.max.apply(Math, arr); // 7 Math.min.apply(Math, arr);

1.1K30

划重点:js中的this、call、apply

js中this有4种指向,分别为: 作为对象的方法调用 作为普通函数调用 构造器调用 Function.prototype.call或Function.prototype.apply调用 1、当作为对象的方法调用时...方法赋值给新的变量func2时,func2就是一个全局作用域中的普通函数,而非obj对象中的方法,已经与getName方法是两个完全独立的方法,拥有完全不同的作用域上下文*/ 3、在构造器中调用this 先要理解js...构造器无return返回值返回值不为对象类型数据时,构造器中的this指向被构造器new出来的实例对象;构造器有return返回值且值为Object对象类型的数据时,this指向该构造器运算后返回出来的对象值...关于apply或call,两者的作用完全一致,都是更改调用apply或call的函数体内的this对象指向。...延伸应用: 理解了this、call、apply后,在实际js开发中,可以很方便的实现对象的继承 继承demo1: 1var Parent = function(){ 2 this.name

95320

js中call、apply、bind那些事

前言 回想起之前的一些面试,几乎每次都会问到一个js中关于call、apply、bind的问题,比如… 怎么利用call、apply来求一个数组中最大或者最小值 如何利用call、apply来做继承 apply...所以其实他们干的事从本质上讲都是一样的动态的改变this上下文,但是多少还是有一些差别的.. call、apply与bind的差别 call和apply改变了函数的this上下文后便执行该函数,而bind...;fn.apply(obj, [arg1, arg2, arg3...]); 应用 知道了怎么使用和他们之间的区别,接下来我们来了解一下通过call、apply、bind的常见应用场景。...,-8,687); 将伪数组转化为数组 js中的伪数组(例如通过document.getElementsByTagName获取的元素)具有length属性,并且可以通过0、1、2…下标来访问其中的元素...Array.prototype.slice.call(arrayLike); 上面arr便是一个包含arrayLike元素的真正的数组啦( 注意数据结构必须是以数字为下标而且一定要有length属性 ) 数组追加 在js

1.7K50

JS中的call()和apply()方法

JS中的call()和apply()方法 1、方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,...apply方法: 语法:apply([thisObj[,argArray]]) 定义:应用某一对象的一个方法,用另一个对象替换当前对象。...add.call(sub,3,1); 这个例子中的意思就是用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4); // 注意:js...18 { 19 Class10.call(this); 20 Class11.call(this); 21 } 很简单,使用两个 call 就实现多重继承了 当然,js...说了call ,当然还有 apply,这两个方法基本上是一个意思,区别在于 call 的第二个参数可以是任意类型,而apply的第二个参数必须是数组,也可以是arguments 还有 callee,caller

2.1K30

js中call、apply、bind那些事

前言 回想起之前的一些面试,几乎每次都会问到一个js中关于call、apply、bind的问题,比如… 怎么利用call、apply来求一个数组中最大或者最小值 如何利用call、apply来做继承 apply...所以其实他们干的事从本质上讲都是一样的动态的改变this上下文,但是多少还是有一些差别的.. call、apply与bind的差别 call和apply改变了函数的this上下文后便执行该函数,而bind...call、apply、bind的常见应用场景。...,-67,5,7,6,-8,687); 将伪数组转化为数组 js中的伪数组(例如通过document.getElementsByTagName获取的元素)具有length属性,并且可以通过0、1、2…下标来访问其中的元素...Array.prototype.slice.call(arrayLike); 上面arr便是一个包含arrayLike元素的真正的数组啦( 注意数据结构必须是以数字为下标而且一定要有length属性 ) 数组追加 在js

1.6K60
领券