2019独角兽企业重金招聘Python工程师标准>>>

bind是Function的方法,js5版的,在js3中可以用代替方案模拟,但依旧有些细节没法模拟。

/********************************bind函数在IE8中没有,兼容性代码:js权威指南(6th)P191********************************/
if (!Function.prototype.bind) {Function.prototype.bind = function (o/*, args*/) {if (typeof this !== "function") {// closest thing possible to the ECMAScript 5 internal IsCallable function throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); }var self=this, boundArgs=arguments;return function(){var args=[],i;for(i=1; i<boundArgs.length; i++) args.push(boundArgs[i]);for(i=0; i<arguments.length; i++) args.push(arguments[i]);return self.apply(o, args);};};
} /********************************bind函数在IE8中没有,兼容性代码:js权威指南(6th)P191 end********************************/

/*******************************

*bind函数在IE8中没有,兼容性代码:某博客版

*(http://www.jb51.net/article/32837.htm)

********************************/

if (!Function.prototype.bind) {

Function.prototype.bind = function (oThis) {

if (typeof this !== "function") {

// closest thing possible to the ECMAScript 5 internal IsCallable function

throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");

}

var aArgs = Array.prototype.slice.call(arguments, 1),

fToBind = this,  fNOP = function () {},

fBound = function (){

return fToBind.apply(this instanceof fNOP && oThis?this:oThis,

aArgs.concat(Array.prototype.slice.call(arguments)));

};

fNOP.prototype = this.prototype;

fBound.prototype = new fNOP();

return fBound;

};

}

/*******************************

*bind函数在IE8兼容性代码:某博客版。结束

********************************/

-------------------------------------------------------------------

具体用法

-------------------------------------------------------------------

o1对象有个f方法

想让o2对象继承o1的f方法

bind一下,o2对象就有这个现成的东西了。

//o2.f = o1.f.bind(o2);

//简练的bind写法1:

var f=function(x, y){ return (x+y);}

var o={};

g=f.bind(o,1);//绑定1到x;

alert(  g(2)  );

//简练的bind写法2:

//把f函数绑定到o上,并返回一个新方法:f.bind(o);

function f(x,y){        return  x+y;    }

var o={};

//var g=f.bind(o, 1); alert( 'g 是: '+ g(3)  );

//或者

o.m=f.bind(o, 2); alert(  o.m(10)  );

//_________________________________

//把o1的f方法绑定到o2上,并返回一个新方法:o2.f = o1.f.bind(o2);

var o1={x:1, y:3};

o1.f = function(y){

return (this.x + this.y); }

var o2={x:50, y:8};

o2.y=8;

o2.f =o1.f.bind(  o2 );//把o1.f绑定为o2.f

alert(  o2.f()  );

var g=o1.f.bind(  o2 );//把f绑定到o2上并返回为一个新函数

alert(  g()  );

转载于:https://my.oschina.net/u/812346/blog/206534

bind函数:给对象绑定方法。相关推荐

  1. bind函数失败linux,为什么bind函数返回-1(绑定失败)?

    我想将一个套接字绑定到IP地址和它将监听连接的端口.这里是我的相关代码(W注释和调试打印语句)为什么bind函数返回-1(绑定失败)? #define PORTNUM 2345 int main(in ...

  2. JavaScript 中判断一个函数的 this 绑定

    this 是一个很特别的关键字,被自动定义在所有函数的作用域中.this 实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用(这句话不适用于箭头函数,想了解箭头函数的可以前往ES6 ...

  3. 面试让写一个“bind”函数,详解五层bind函数进阶写法,带你写出一个让面试官满意的 “bind” 函数

    文章目录 手写bind函数 第一层 - 绑定在原型上的方法 第二层 - 改变this的指向 第三层 - 支持柯里化 第四层 - 考虑 new 的调用 第五层 - 保留函数原型 总结最终版bind函数 ...

  4. SICP2——Python中使用函数构建对象

    一.使用对象构建抽象 1.1 数据抽象 现在到了数学抽象中最关键的一步:让我们忘记这些符号所表示对象.-根本不必考虑它们到底代表着什么东西. 上一篇文章主要强调的是对数据的操作以及这些操作之间的组合与 ...

  5. jQuery 事件绑定方法(bind hover toggle live.... )、删除事件方法(unbind, die)及 事件对象

    事件绑定方法: 1.<type>(function) $("button").click(function(){... }); 2.bind(map) $(" ...

  6. js中函数对象的方法,原型方法apply、call、bind、toString、toLocaleString、valueOf

    全栈工程师开发手册 (作者:栾鹏) js系列教程4-函数.函数参数教程全解 js中函数也是一种对象,因此有自己的原型对象,可以作为其他对象的属性,也可以作为其他函数的参数. 函数方法 [apply() ...

  7. 函数对象,lamdda表达式,function函数包装,std::bind函数绑定

    一 函数对象 在学习其他知识之前,先来学习函数对象,然后引出std::lambda.std::function.std::bind等内容的学习,那么究竟什么是函数对象呢? 函数对象(Function ...

  8. jQuery的三种bind/One/Live事件绑定使用方法

    jQuery是 一款优秀的JavaScript框架,在旧版里主要用bind()方法,在新版里又多了两种One(),Live(),下面介绍这几种方法的使用: 1. bind/Unbind 在jquery ...

  9. react事件处理函数中绑定this的bind()函数

    问题引入 import React, { Component } from 'react'; import {Text,View } from 'react-native';export defaul ...

最新文章

  1. 各种语言下 static 详解
  2. Leetcode 451. 根据字符出现频率排序 解题思路及C++实现
  3. c语言程序设保安值班,保安值班系统
  4. 小批量梯度下降算法步骤_TensorFlow从0到1 - 6 - 解锁梯度下降算法
  5. python学习笔记7--面向对象进阶,异常处理,socket编程初识
  6. gperftools安装使用_记一次使用gperftools优化线上程序
  7. SAP License:CKMLCP运行物料帐时单个物料冲突无法运行
  8. ios UICollectionViewLayout 横向瀑布流
  9. [Android Pro] 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能
  10. html中加载页面时调用函数,js页面加载时调用函数方法
  11. 完美卸载SQL Server 2008的方案
  12. Android 谷歌地图不显示,Android谷歌地图不显示在模拟器
  13. jmeter 接口测试 签名_JMeter处理接口签名(sign)
  14. 推荐给你三个知识星球助你选对人生
  15. Phalanx——二维dp
  16. Java多word文件生成后进行压缩并导出下载后,压缩文件损坏并提示“不可预料的压缩文件末端”和“CRC校验失败”
  17. 机器学习总结(二):梯度消失和梯度爆炸
  18. Java模拟拨打电话程序_java_编写android拨打电话apk应用实例代码,android 实现拨打电话的app,代 - phpStudy...
  19. AWS 区域(Region)
  20. 【嵌入式开发教程9】手把手教你做平板电脑-WIFI 驱动实验教程

热门文章

  1. 美国政府悬赏1000万美元,获取 DarkSide 勒索团伙线索
  2. 通过条形码扫描器攻击工控系统
  3. Kubelet 对资源紧缺状况的应对
  4. 汉威电子持续发力智慧城市产业链
  5. Highcharts基础教程(七):图例(Legend)
  6. 用memoization优化递归算法[JS/PHP实现]
  7. C#用户进行LDAP验证并返回员工信息
  8. Scaling For iPad mini
  9. Java: Queue
  10. Windows Server 2003网络配置与管理 域控制器的管理