JS对象:this绑定

this指向一个对象

解析器在调用函数每次都会向函数内部传递进一个隐含的参数,这个隐含的参数就是this,this指向的是一个对象,这个对象我们称为函数执行的 上下文对象。

  • 普通函数是window对象的方法,调用普通函数其实是调用window对象的方法
  • 哪个对象调用方法,this便指向哪个对象

this指向总结

  • 以函数的形式调用时,this永远都是window

  • 以方法的形式调用时,this是调用方法的那个对象

  • 以构造函数的形式调用时,this是新创建的那个对象

  • 使用call和apply调用时,this是指定的那个对象(详见函数章节)

代码示例

    function Person(name, age) {
        console.log(this);
        this.name = name;
        this.age = age;
        this.sayName = function () {
            console.log(this);
        };
    }

    // 以普通函数调用  相当于Window.Person();
    Person();   // Window {parent: Window, opener: null, …}

    // 以构造函数调用
    var obj1 = new Person('悟空', 18);    // Person {}  没有值是因为此时还未添加属性
    var obj2 = new Person('八戒', 28);    // Person {}

    // 以方法调用
    obj1.sayName();     // Person {name: "悟空", age: 18, sayName: ƒ}
    obj2.sayName();     // Person {name: "八戒", age: 28, sayName: ƒ}

this代替对象

未使用this代替对象

    // 创建一个name变量
    var name = '全局';

    // 创建一个fun()函数
    function fun() {
        // 相当于 console.log(window.name);
        console.log(name);
    }

    // 创建两个对象
    var obj1 = {
        name:'悟空',
        sayName:fun
    };
    var obj2 = {
        name:'八戒',
        sayName:fun
    };

    // 调用
    fun();          // 全局
    obj1.sayName(); // 全局
    obj2.sayName(); // 全局

	// 我们希望调用 obj1.sayName() 可以输出obj1的名字

使用this代替对象

    // 创建一个name变量
    var name = '全局';

    // 创建一个fun()函数
    function fun() {
        console.log(this.name);
    }

    // 创建两个对象
    var obj1 = {
        name:'悟空',
        sayName:fun
    };
    var obj2 = {
        name:'八戒',
        sayName:fun
    };

    // 调用
    fun();          // 全局
    obj1.sayName(); // 悟空
    obj2.sayName(); // 八戒
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值