美文网首页
改变this指向(转)

改变this指向(转)

作者: p712long | 来源:发表于2018-11-26 13:43 被阅读0次

    我们在js中可以使用document.write()方法向网页中输入文本内容。如

    document.write("test"); 网页中就会被加入’test’文本。

    但是如果我们像下面这么写呢?

    1  var myWrite = document.write;

    2  myWrite("test");  //报错 

    上面的代码首先是我将document.write方法赋值给myWrite方法。然后使用myWrite()方法向网页中输入文本内容。但是这里会报错,为什么呢?

    原因就在这个write方法的this指针的域被改变啦!

    document.write()方法的this是指向document的,所以可以向网页中输入文本内容。

    但是我们将document.write方法赋值给myWrite对象,然后在调用myWrite()方法。调用myWrite()方法的对象域是全局变量window,相当于window.myWrite()。此时this指向window,而不指向document.所以会报错。

    遇到上面的this指向被改变了,该怎么办呢?

    这时候就要设置this的指针指向了,JavaScript有三个方法bind()、call()、apply()。

    1.使用bind方法

    a.bind(b); 就是将a()方法的this指针的作用域绑定到b对象的作用域上,也就是现在a的this指针的作用域就是b

    如是上面的代码就可以改成:

      1   var myWrite = document.write; 

       2  myWrite.bind(document)("test"); //此时的this指针指向了bind()的document,网页中正常输出test。

    2.使用call方法

    call(a, b);: a是当前方法需要指向的域,后面的b是当前方法的参数,可以传多个参数,多个参数直接用逗号隔开即可,如 :call(a, b, c, d);, b, c, d都是方法的参数(arguments)。

    var myWrite = document.write; 

    myWrite.call(document, "test"); //此时的this指针指向了bind()的document,网页中正常输出test。 

        1

        2

    3.使用apply方法

    apply(a, b); :a是当前方法需要指向的域,后面的b是当前方法的参数,可以传多个参数,多个参数需要使用数组来传入。如apply(a, [b, c, d]);,b、c、d为参数(数组)。

    1 var myWrite = document.write; 

    2 myWrite.apply(document, "test"); //此时的this指针指向了bind()的document,网页中正常输出test。

    体请看: JavaScript中call,apply,bind方法的总结

    相关文章

      网友评论

          本文标题:改变this指向(转)

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