zoukankan      html  css  js  c++  java
  • 关于this指向

    例子1:this指向

    var name = "小明",
        age = 17;
    var a = {
        name: "小花",
        getInfo: function() {
            console.log(this.name, this.age)
        }
    }
    a.getInfo(); //小花 undefined    this指向的是a对象
    var b = a.getInfo;             
    b(); //小明 17   this指向window

    例子2:bind改变this指向

    var name = "小明",
        age = 17;
    var c = {
        name: "小花",
        getfun: function() {
            console.log(this.name)
            return function() {
                console.log(this.name, this.age)
            }
        }
    }
    var d = c.getfun.bind(this); //小明   改变getfun中this指向,this指向window
    d()(); //小明 17
    var e = c.getfun().bind(this); //小花  改变getfun闭包中的this指向,this指向window,但getfun中this仍然指向c对象。
    e(); //小明 17

    bind、call、apply都是改变this的指向,

    区别一:apply、call区别在于是不会马上的执行。

    obj.myFun.call(db)
    obj.myFun.apply(db);
    obj.myFun.bind(db)();

    区别二:接受参数的方式不一样。

    obj.myFun.call(db,'成都','上海');     // 德玛 年龄 99  来自 成都去往上海
    obj.myFun.apply(db,['成都','上海']);      // 德玛 年龄 99  来自 成都去往上海  
    obj.myFun.bind(db,'成都','上海')();       // 德玛 年龄 99  来自 成都去往上海
    obj.myFun.bind(db,['成都','上海'])();   // 德玛 年龄 99  来自 成都, 上海去往 undefined

    bind 除了返回是函数以外,它的参数和 call 一样。

    三者的参数不限定是 string 类型,允许是各种类型,包括函数 、 object 等等!

  • 相关阅读:
    C# if else 使物体在X轴循环移动
    Jmeter之csv、用户自定义变量以及Query Type分析
    jmeter实战之笔记整理
    Badboy参数化
    Jmeter之Badboy录制脚本及简化脚本http请求
    jmeter之jdbc请求
    性能测试
    接口自动化学习--testNG
    接口自动化学习--mock
    Git工具使用小结
  • 原文地址:https://www.cnblogs.com/liangtao999/p/14960687.html
Copyright © 2011-2022 走看看