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. 漫谈二叉树遍历(非递归)
  2. 我离开Uber,开始自主创业后......
  3. Gartner认为安全性将取代成本和敏捷性成为政府部门采用云服务的首要原因
  4. 牛客题霸 [矩阵乘法] C++题解/答案
  5. 华为开源构建工具_为什么我构建了用于大数据测试和质量控制的开源工具
  6. 精通java益处_你真的精通Java吗?
  7. url传参(中文乱码)值得注意的地方
  8. python3基本数据类型02——列表、元组
  9. 某 iOS 零点击 0day 漏洞已存在8年之久且正遭利用?苹果称正在调查并将推出补丁...
  10. 阿里人告诉你毕业3年,为何技术能力相差越来越大?
  11. 风雨三十载,华为的沉浮往事
  12. Android Killer反编译apk报错
  13. word特殊符号汇总
  14. 深圳云计算培训:专科生学习云计算就业前景如何?
  15. 官方文档-Linux服务器集群系统(一)
  16. 如何用ps抠出完美火焰?
  17. P1554 梦中的统计
  18. 攻防世界-----web知识点总结
  19. Centos 7.2 及php7环境下升级memcache未果,改安装 memcached
  20. gnuplot下载安装使用

热门文章

  1. 《Core Java 2》读书笔记(二)
  2. CISA:攻击者正在利用开源Zabbix服务器中的多个漏洞!
  3. 我是如何从零基础自学到找到工作经过
  4. 广度优先搜索算法(Breath-first Search)是如何搜索一张图的?
  5. 夜上海音乐播放器 v 1.0
  6. 【iOS-Cocos2d游戏开发之二十一 】自定义精灵类并为你的精灵设置攻击帧以及动画创建!【二】...
  7. 判断字符串是否是正整数
  8. Could not resolve this reference. Could not locate the assembly
  9. CentOS6.4配置Hadoop-2.6.0集群配置安装指南
  10. c与c++分别是怎样动态分配和释放内存的,有什么区别?(转)