zoukankan      html  css  js  c++  java
  • bind()

    首先是改变this指向问题

     1 var altwrite = document.write;

    2 altwrite("hello"); 

    上面的程序运行,会报错:Uncaught TypeError: Illegal invocation  非法调用

    报错的原因就是this指向问题,因为altwrite指向的是windowd对象,而write指向的是document对象

    我们可以通过bind()修改altwrite的上下文,把它指向document,就可以了,修改如下:

     1 var altwrite = document.write;

    2 altwrite.bind(document)("hello"); 

    当然也可以使用call()方法:

     1 altwrite.call(document, "hello") 

    绑定函数

    bind()最简单的用法是创建一个函数,使这个函数不论怎么调用都有同样的this值。

    将方法从对象中拿出来,然后调用,并且希望this指向原来的对象。如果不做特殊处理,一般会丢失原来的对象。使用bind()方法能够很漂亮的解决这个问题:

     1   this.num = 9;
     2     var mymodule = {
     3         num: 81,
     4         getNum: function() {
     5             return alert(this.num);
     6         }
     7     };
     8 
     9     mymodule.getNum();//81
    10 
    11     var getNumb = mymodule.getNum;
    12     getNumb();// 9  这个函数里面的this指向的是全局对象
    13 
    14     //创建一个this绑定到mydule的函数
    15     var boundGetNum = getNumb.bind(mymodule);
    16     boundGetNum(); // 81
  • 相关阅读:
    C# vb实现浮雕特效滤镜效果
    一张图看懂SharpImage
    C#控制操控操作多个UVC摄像头设备
    C#读写修改设置调整UVC摄像头画面-缩放
    继承多态绕点 Java篇
    继承多态绕点 C#篇
    lock关键字理解
    关于C#迭代器
    关于排列组合中组合结果
    C#与Java中相等关系
  • 原文地址:https://www.cnblogs.com/colaman/p/6266529.html
Copyright © 2011-2022 走看看