javascript函数方法中bindcallapply的使用和区别

Posted coderkey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript函数方法中bindcallapply的使用和区别相关的知识,希望对你有一定的参考价值。

一,this的指向

this.name = 'pink'
const obj = 
    name: 'coderkey',
    way(age,sex) 
        console.log(`姓名:$this.name 年龄:$age 性别:$sex`);
    

obj.way(24,'男')  // 姓名:coderkey 年龄:24 性别:男   对象obj的方法
let fn = obj.way
fn(24,'男')  // 姓名:pink 年龄:24 性别:男      全局window 

二,call( )方法的使用

(1)语法:

function.call(thisArg, arg1, arg2, ...)

(2)参数:

thisArg

可选的。在 function 函数运行时使用的 this 值。

arg1, arg2, ...

指定的参数列表。

(3)返回值:

使用调用者提供的 this 值和参数调用该函数的返回值。若该方法没有返回值,则返回 undefined

(4)用法:

this.name = 'pink'
const obj = 
    name: 'coderkey',
    way(age,sex) 
        console.log(`姓名:$this.name 年龄:$age 性别:$sex`);
    

const newObj = 
    name: 'why'

let fn = obj.way
fn.call(obj,17,'女')  // 姓名:coderkey 年龄:17 性别:女
fn.call(newObj,17,'女')  // 姓名:why 年龄:17 性别:女 

三,apply( )方法的使用

(1)语法:

apply(thisArg)
apply(thisArg, argsArray)

(2)参数:

thisArg

function 函数运行时使用的 this 值。

argsArray 可选

一个数组或者类数组对象,其中的数组元素将作为单独的参数传给 function 函数

(3)返回值:

调用有指定 this 值和参数的函数的结果。

(4)用法:

this.name = 'pink'
const obj = 
    name: 'coderkey',
    way(age,sex) 
        console.log(`姓名:$this.name 年龄:$age 性别:$sex`);
    

const newObj = 
    name: 'why'

let fn = obj.way
fn.apply(obj,[18,'女'])   // 姓名:coderkey 年龄:18 性别:女
fn.apply(newObj,[18,'女'])   // 姓名:why 年龄:18 性别:女

四,bind( )方法的使用

(1)语法:

function.bind(thisArg[, arg1[, arg2[, ...]]])     // 创建一个新的函数

(2)参数:

thisArg

调用绑定函数时作为 this 参数传递给目标函数的值。

arg1, arg2, ...

当目标函数被调用时,被预置入绑定函数的参数列表中的参数。

(3)返回值:

返回一个原函数的拷贝,并拥有指定的 this 值和初始参数。

(4)用法:

this.name = 'pink'
const obj = 
    name: 'coderkey',
    way(age,sex) 
        console.log(`姓名:$this.name 年龄:$age 性别:$sex`);
    

const newObj = 
    name: 'why'

let fn = obj.way
fn.bind(obj,19,'女')()  // 姓名:coderkey 年龄:19 性别:女
fn.bind(newObj,19,'女')()  // 姓名:why 年龄:19 性别:女

五、bind、call、apply的区别

相同点:

三个都是用于改变this指向;
接收的第一个参数都是this要指向的对象;

不同点:

call( )bind( )传参相同,多个参数依次传入的;
apply( )只有两个参数,第二个参数为数组;
call( )apply( )都是对函数进行直接调用,而bind( )方法不会立即调用函数,而是返回一个修改this后的函数;


以上是关于javascript函数方法中bindcallapply的使用和区别的主要内容,如果未能解决你的问题,请参考以下文章

在构造函数与原型中声明javascript对象方法[重复]

javascript中什么是函数

在 Javascript 构造函数中调用方法并访问其变量

JavaScript中valueOf函数与toString方法

JavaScript调用函数的方法

JavaScript 函数定义方法