学习This解析,call,capplt,bind

132 阅读1分钟

this

1.默认绑定 2.显式绑定 3.隐式绑定 4.new 绑定 5.箭头函数绑定。

1.调用位置。函数在代码中被调用的位置。
2.绑定规则  默认绑定:this指向全局对象,严格模式下,this指向undefined
 隐式绑定: 函数中的this会被绑定到上下文对象当中。
 显式绑定:call apply 
 function foo() {
console.log( this.a );}
var obj = { a: 2}; foo.call( obj ); // 2

使用new 调用foo()函数时,会创造一个新对象并把它(bar)绑定到构造函数中的this.
function foo(a){this.a=a;}
var obj=new foo(3)

3.箭头函数,箭头函数根据外层作用域来决定this4.foo()内部的箭头函数会捕获调用函数的this.箭头函数的this无法被更改。

function foo() {
// 返回一个箭头函数
return (a) => {
    // this继承自foo()
    console.log( this.a );
};}
var obj1 = {
a: 2};
var obj2 = {  a: 3}
var bar = foo.call( obj1 ); bar.call( obj2 ); // 2,不是3!

call,apply,bind

call的语法: func.call(thisArg,arguments) func.apply(thisArg,[...arguments]) .call(thisArgs,a,b,c) .apply(thisArgs,[a,b])

call,apply作用相同,传参不同。call只能单个传参 apply方法调用一个函数,使其具有指定的this值,并作为一个数组传递需要的参数。 bind是创建一个函数,在其被调用时,将this关键字设置为提供的值,在调用新函数时,在任何提供之前给定一个参数序列,

,所以在调用时要加() eg: b.bind(q,1,8)()

var a={

name:"jiayi",

add:function(a,b){

console.log(a+b)
}
}

var b=a.add

b.apply(a,[1,3])

b.call(a,2,1)
b.bind(a,1,8)()