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 等等!

  • 相关阅读:
    win8应用商店安装路径
    GridView用存储过程实现分页
    Struts学习笔记之HTML标签库
    一个大学毕业生的反思
    JUnit in Action关于Controller的简明阐述
    Struts学习笔记之BEAN标签库
    Struts中web.xml和strutsconfig.xml配置详解
    Os学习笔记之处理机调度
    log4j.properties配置详解
    JUnit学习笔记之简介
  • 原文地址:https://www.cnblogs.com/liangtao999/p/14960687.html
Copyright © 2011-2022 走看看