美文网首页
this的四种绑定方式

this的四种绑定方式

作者: _hider | 来源:发表于2020-06-20 15:33 被阅读0次

this有四种绑定方式,分别是默认绑定,隐式绑定,显示绑定和new绑定,四种绑定方式根据this不同的使用场景进行区分。从优先级的角度来说 new绑定 > 显式绑定 > 隐式绑定 > 默认绑定

一. 默认绑定

this默认是绑定到window上。

console.log(this === window); //true

函数独立调用,默认this绑定也是绑定全局,它是不带任何修饰的绑定。

var num = 1;
function fn(){
    console.log(this.num);
};
fn();

被嵌套的函数独立调用时,this默认绑定到window

var num = 1;
var obj = {
    num:2,
    fn(){
        function test(){
            console.log(this.num);
        };
        test();
    }
};
obj.fn(); //1

虽然test函数被嵌套在obj.fn函数中,但test函数是独立调用,而不是方法调用。所以this默认绑定到window上,上例等同于:

function fn(){
    (function(){
        console.log(this.num);
    })();
};
var num = 1;
var obj = {
    num:2,
    fn:fn
};
obj.fn(); //1

自执行函数是自己执行,没有被调用,this不是函数被定义时绑定,而是函数被调用时被绑定。所以自执行函数中的this一直指向的是window(非严格模式下)。

二. 隐式绑定

函数被调用时有上下文对象,那么this会绑定这个上下文对象,代码如下:

function fn() {
    console.log(this.num);
};
var num = 1;
var obj = {
    num: 2,
    fn: fn
};
obj.fn(); //2

fn函数被调用时是指向obj对象,当函数引用有上下文对象时,隐式绑定就会把函数调用中的this绑定到这个上下文对象,简单来说函数中的this总指向调用它的对象

还有一点需要注意的是对象属性引用链中只有最顶层或者说最后一层会影响调用位置。

function fn() {
    console.log(this.num);
};
var num = 1;
var obj2 = {
    num: 3,
    fn: fn
};
var obj = {
    num: 2,
    obj2: obj2
};
obj.obj2.fn(); //3
三. 显示绑定

显示绑定就是通过callapplybind改变this指向。

function fn() {
    console.log(this.num);
};
var num = 1;
var obj2 = {
    num: 3
};
var obj = {
    num: 2,
    fn: fn
};
obj.fn.call(obj2); //3
obj.fn.call(window); //1
四. new绑定

这个就是通过构造函数给新new出来的对象添加属性和方法。

function fn(param){
    this.param = param;
};
let fn2 = new fn('hello world');
console.log(fn2); //{ param : 'hello world' };

相关文章

  • this的四种绑定方式

    this有四种绑定方式,分别是默认绑定,隐式绑定,显示绑定和new绑定,四种绑定方式根据this不同的使用场景进行...

  • React组件绑定this的四种方式

    React组件绑定this的四种方式[https://www.cnblogs.com/showcase/p/105...

  • 浅谈this的四种绑定方式

    再一次进行对this知识点的复习,每一次都是温故知新的过程。这次对于this的学习基于《你所不知道的JavaScr...

  • js 继承

    js继承有四种方式 1. 构造函数绑定 使用call或apply方法,将父对象的构造函数绑定在子对象上,即在子对象...

  • this的绑定规则(四种)

    this 的四种绑定策略( 默认绑定、隐式绑定、显式绑定、new 绑定 ) 默认绑定:this 一般默认指向全局作...

  • 如何正确的判断this? 箭头函数的this是什么?

    this的绑定规则有四种:默认绑定,隐式绑定,显式绑定,new绑定 。 函数是否在 new 中调用(new绑定),...

  • jQuery绑定事件的四种方式

    jQuery中提供了四种事件监听方式,分别是bind、live、delegate、on,对应的解除监听的函数分别是...

  • jQuery绑定事件的四种方式

    此篇文章是在51edu.com上copy过来的,本来想注明作者的,但是没找到作者…… Query提供了多种绑定事件...

  • jQuery事件

    jquery 绑定事件 在1.7之前的版本中jQuery处理事件提供了四种事件监听方式,分别是bind、live、...

  • vue elementUI实现el-table点击行单选, 点击

    以下分别介绍这四种效果的实现方式,非常简单! 首先:table绑定点击行事件 @row-click="rowCli...

网友评论

      本文标题:this的四种绑定方式

      本文链接:https://www.haomeiwen.com/subject/zjopxktx.html