bind函数:给对象绑定方法。
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函数:给对象绑定方法。相关推荐
- bind函数失败linux,为什么bind函数返回-1(绑定失败)?
我想将一个套接字绑定到IP地址和它将监听连接的端口.这里是我的相关代码(W注释和调试打印语句)为什么bind函数返回-1(绑定失败)? #define PORTNUM 2345 int main(in ...
- JavaScript 中判断一个函数的 this 绑定
this 是一个很特别的关键字,被自动定义在所有函数的作用域中.this 实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用(这句话不适用于箭头函数,想了解箭头函数的可以前往ES6 ...
- 面试让写一个“bind”函数,详解五层bind函数进阶写法,带你写出一个让面试官满意的 “bind” 函数
文章目录 手写bind函数 第一层 - 绑定在原型上的方法 第二层 - 改变this的指向 第三层 - 支持柯里化 第四层 - 考虑 new 的调用 第五层 - 保留函数原型 总结最终版bind函数 ...
- SICP2——Python中使用函数构建对象
一.使用对象构建抽象 1.1 数据抽象 现在到了数学抽象中最关键的一步:让我们忘记这些符号所表示对象.-根本不必考虑它们到底代表着什么东西. 上一篇文章主要强调的是对数据的操作以及这些操作之间的组合与 ...
- jQuery 事件绑定方法(bind hover toggle live.... )、删除事件方法(unbind, die)及 事件对象
事件绑定方法: 1.<type>(function) $("button").click(function(){... }); 2.bind(map) $(" ...
- js中函数对象的方法,原型方法apply、call、bind、toString、toLocaleString、valueOf
全栈工程师开发手册 (作者:栾鹏) js系列教程4-函数.函数参数教程全解 js中函数也是一种对象,因此有自己的原型对象,可以作为其他对象的属性,也可以作为其他函数的参数. 函数方法 [apply() ...
- 函数对象,lamdda表达式,function函数包装,std::bind函数绑定
一 函数对象 在学习其他知识之前,先来学习函数对象,然后引出std::lambda.std::function.std::bind等内容的学习,那么究竟什么是函数对象呢? 函数对象(Function ...
- jQuery的三种bind/One/Live事件绑定使用方法
jQuery是 一款优秀的JavaScript框架,在旧版里主要用bind()方法,在新版里又多了两种One(),Live(),下面介绍这几种方法的使用: 1. bind/Unbind 在jquery ...
- react事件处理函数中绑定this的bind()函数
问题引入 import React, { Component } from 'react'; import {Text,View } from 'react-native';export defaul ...
最新文章
- 各种语言下 static 详解
- Leetcode 451. 根据字符出现频率排序 解题思路及C++实现
- c语言程序设保安值班,保安值班系统
- 小批量梯度下降算法步骤_TensorFlow从0到1 - 6 - 解锁梯度下降算法
- python学习笔记7--面向对象进阶,异常处理,socket编程初识
- gperftools安装使用_记一次使用gperftools优化线上程序
- SAP License:CKMLCP运行物料帐时单个物料冲突无法运行
- ios UICollectionViewLayout 横向瀑布流
- [Android Pro] 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能
- html中加载页面时调用函数,js页面加载时调用函数方法
- 完美卸载SQL Server 2008的方案
- Android 谷歌地图不显示,Android谷歌地图不显示在模拟器
- jmeter 接口测试 签名_JMeter处理接口签名(sign)
- 推荐给你三个知识星球助你选对人生
- Phalanx——二维dp
- Java多word文件生成后进行压缩并导出下载后,压缩文件损坏并提示“不可预料的压缩文件末端”和“CRC校验失败”
- 机器学习总结(二):梯度消失和梯度爆炸
- Java模拟拨打电话程序_java_编写android拨打电话apk应用实例代码,android 实现拨打电话的app,代 - phpStudy...
- AWS 区域(Region)
- 【嵌入式开发教程9】手把手教你做平板电脑-WIFI 驱动实验教程