this关键字

this关键字

this关键字是什么

this关键字是JavaScript中最庞杂的机制之一。它是一个很迥殊的关键字,被定义在所有函数的作用域中。然则纵然黑白常有履历的JavaScript开发者也很难说清它究竟指向什么。
1.this被定义在所有函数的作用域中
2.this指向哪一个对象不取决于this被定义在那里,而是取决于挪用的位置

//定义一个全局变量
var v = 10;
//this经常被定义在函数的作用域中
function fn(){
    //this 老是要返回一个对象
    console .log(this . v);
}
fn();

绑定划定规矩

默许绑定

在一个函数体中运用this,当该函数被自力挪用。能够把这条划定规矩看做是没法运用其他划定规矩时的默许划定规矩。

function foo(){
   console .log(this .a);
}
var a=2;
foo();//2

隐式绑定

隐式绑定的划定规矩须要斟酌的是挪用位置是不是有上下文对象,或许说是不是被某个对象具有或许包括。

function foo(){
    console .log(this.a);
}
var obj = {
  a:2,
  foo:foo
};
obj.foo();//2

隐式绑定丧失

隐式绑定丧失是最常见的this绑定题目,指的就是被隐式绑定的函数会丧失绑定对象,也就是说它会运用默许绑定,从而把this绑定到全局对象。

// 定义一个全局变量
var v = 100;
// 定义一个函数
function fn(){
    console.log(this.v);
}
// 定义一个对象
var obj = {
    v : 200,
    f : fn // 对象的f()要领指向fn()函数
}
// 定义一个全局变量,并被赋值为对象obj的f()要领
var fun = obj.f;
// 将fun作为一个函数举行挪用
fun();

显现绑定

显现绑定就是明白在挪用时,this所绑定的对象。JavaScript中供应了apply()要领和call()要领完成,这两个要领的第一个参数吸收是一个对象,会把这个对象绑定到this,接着在挪用函数时指定这个this

// 定义一个全局变量
var v = 100;
// 定义一个函数
function fn(){
    console.log(this.v);
}
// 定义一个对象
var obj = {
    v : 200,
    f : fn // 对象的f()要领指向fn()函数
}
// 定义一个全局变量,并被赋值为对象obj的f()要领
var fun = obj.f;
// 将fun作为一个函数举行挪用
fun.apply(obj);

new绑定

1.建立(或许说组织)一个全新的对象
2.这个新对象会绑定到函数挪用的this
3.假如函数没有返回其他对象,那末new表达式中的函数挪用会自动返回这个新对象。

function Hero(name){
    this.name = name;
}
// this取决于函数挪用的位置
var hero1 = new Hero('hhh');

var hero2 = new Hero('xxx');

注意事项

1.防止多层this
2.防止数组要领中的this
3.防止回调函数中的this

    原文作者:老板便宜一点呗
    原文地址: https://segmentfault.com/a/1190000016114892
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞