JavaScript Bind()趣味解答 包懂~~
首先声明一下,这个解答是从Segmentfault看到的,挺有意思就记录下来。我放到最下面:
bind()
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
Function.prototype.bind 这个方法是 ECMAScript 5 新增加的,在 Firefox 4/Chrome 中都支持,IE8 应该还不支持。
简介:
创建一个 Function ,当这个新的 Function 被调用时,使用给定的 this 值所在的 Context,并且传入给定的参数序列。
语法:
var bound = fun.bind( thisValue, [, arg1 [, arg2 [ ... ] ] ] );
参数:
thisValue:当新的 Function 被调用时,thisValue 会付给其 this 值。如果使用 new 操作符调用 Function,则忽略 thisValue。
arg1, arg2, ...:当新的 Function 被调用时,当作参数列表传入,插入在调用时实际参数之前。
--------------------------------------------------我是可爱的分割线-----------------------------------------------------------------------
举个栗子:
链接在此:https://segmentfault.com/q/1010000002508005
你(son)和你爸(papa)在一块的时候,大家都会知道你爸爸的名字(不知道可以直接问啊!),用代码来说就是:
var papa = {
name: "li gang",
son: function() {
return this.name;
}
};
alert( papa.son() );
但是你不和你爸在一块的时候呢?就成了这样:
var son = papa.son;
alert( son() );
你会发现你大家没办法知道你爸的名字了,然后你就不能为非作歹了。好在你还记得你爸的电话号码,打个电话就又可以兴风作浪又知道了:
alert( son.call(papa) );
然后你想了想,不行啊,不能我每次兴风作浪的时候都得打我爸电话吧,我爸还不得弄死我。诶!这么笨,我随身带着我爸的身份证复印件不就好了嘛,所以你就成了这样:
son = son.bind( papa );
alert( son() );
哈哈,爸爸再也不用担心我出门被打叻(๑´ㅂ`๑)!
就这样又过了半年你爸爸大人作死收了一个养子!什么!遗产全部都是我的!养子的中文名叫 二狗子,英文名叫 er~Gou~Zi:
function erGouZi() {
return this.name;
}
这个二狗子养子也想知道你爸的名字好出去泡妞把妹歌功颂德,哀求了半天之后,老爸也给了他一份复印件:
erGouZi = erGouZi.bind( papa );
alert( erGouZi() );
二狗子这货啊表示非常高兴,决定每次报出爸爸的大名的时候都要加上敬爱的三个字,就像我们经常说敬爱的 x 总理 一样,于是他机智的做了一次小手术:
erGouZi = function() {
var prefix = arguments[0] || "";
return prefix + this.name;
}
erGouZi = erGouZi.bind( papa, "great " );
alert( erGouZi() );
又没过多久,这事被老爸知道了。老爸对于二狗子这种舔脚后跟的行为表示非常满意,对他越来越恩爱亲切,对你越来越冷板凳。最后终于老爸把所有的遗产都给了二狗子而你因为平常只会坑蒙拐骗啥技能也不会只能上街乞讨最后被城管暴打而死。
终!
最后在放一个关于null和undefined的,这个来源于阮老师 undefined与null的区别 文章里的评论,感兴趣的朋友可以去看看。
null
Q:有张三这个人么?
A:有!
Q:张三在哪?
A:已去世了
undefine:
Q:有张三这个人么?
A:没有!
JavaScript Bind()趣味解答 包懂~~的更多相关文章
- 生动详细解释javascript的冒泡和捕获,包懂包会(转)
前言:虽然精通jquery,但对它的原型javascript却不是很了解,最近在学习javascript中遇到了一些困难,比如冒泡和捕获,很多次被提到,但又不知究竟应用在何处.找到了一些好文章解惑,在 ...
- JavaScript内部原理实践——真的懂JavaScript吗?(转)
通过翻译了Dmitry A.Soshnikov的关于ECMAScript-262-3 JavaScript内部原理的文章, 从理论角度对JavaScript中部分特性的内部工作机制有了一定的了解. 但 ...
- 简要谈谈javascript bind 方法
最近去参加了场面试,跟面试官聊了很多JS基础上的东西,其中有个问题是谈谈对apply.call.bind的理解和区别.顿时一愣,apply.call我知道,经常用的东西,bind是什么鬼!!!好像见过 ...
- javascript bind
bind的作用和apply,call类似都是改变函数的execute context,也就是runtime时this关键字的指向.但是使用方法略有不同.一个函数进行bind后可稍后执行. 定义: fu ...
- TOM大叔的几道Javascript题目与解答
几道JS题目 之前没有深入研究js语言,最近几年前端越来越工程化,需要扎实的js基础,看到博客园上有很多大牛分享JS学习文章,幸运看到tom大叔的blog,抽时间潜心学习了其文章,遇到到其出的几道题目 ...
- JavaScript: bind apply call
var foo = function(age,sex){ console.log(this.name,age,sex); }; //call将改变函数运行的context foo.call({name ...
- Java数组、集合的三种遍历方式(包懂)
1 for循环 for(int i = 0;i<arr.length;i++){ System.out.print(arr[i]+" "); } 2 foreach循环,这种 ...
- javascript bind在回调中精简匿名函数的用法
常规写法: Promise对象回调,匿名函数调用其他方法 更精简的写法: 注:这种写法的使用有两个严苛的限制. 1.回调的结果必须放在实际调用方法参数的最后一位: 2.回调函数中只调用其他一个方法.
- JavaScript函数 bind call apply区别
1. apply calll 在JavaScript中 call 和 apply 都是为了改变某个函数运行时上下文而存在的, 换句话说就是为了改变函数内部的this的指向. 这里我们有一个新的对象 b ...
随机推荐
- Xcode使错误停在出错代码上
创建异常断点 依次选择“Debug”>“Breakpoints”>“Create Execption Breakpoint”
- oneuijs/You-Dont-Need-jQuery
oneuijs/You-Dont-Need-jQuery https://github.com/oneuijs/You-Dont-Need-jQuery/blob/master/README.zh- ...
- Alpha阶段第五次Scrum Meeting
情况简述 Alpha阶段第五次Scrum Meeting 敏捷开发起始时间 2016/10/26 00:00 敏捷开发终止时间 2016/10/27 00:00 会议基本内容摘要 汇报各自完成的任务, ...
- Python的MySQLdb模块安装
MySQL-python-1.2.1.tar.gz 下载地址:https://pan.baidu.com/s/1kVfH84v 然后解压,打开README(这个其实没有什么鸟用) 里面有安装过程: ...
- TAC Beta版本 冲冲冲!!!
一.Beta版本冲刺博客目录: 第一天 第二天 第三天 第四天 第五天 第六天 第七天 二.Beta版本需要改进完善的功能: service层传入参数的判断与提示以及各函数内的相应提示 界面改进.优化 ...
- SaaS模式的软件
SaaS是Software-as-a-Service(软件即服务)的简称,随着互联网技术的发展和应用软件的成熟, 在21世纪开始兴起的一种完全创新的软件应用模式.它与"on-demand ...
- 深度分析mysql GROUP BY 与 ORDER BY
鉴于项目的需要,就从网上找到该文章,文章分析得很详细也很易懂,在android里,(不知道是不是现在水平的限制,总之我还没找到在用ContentProvider时可以使用子查询),主要方法是用SQLi ...
- Linux字符集的查看及修改
一·查看字符集 字符集在系统中体现形式是一个环境变量,以CentOS6.5为例,其查看当前终端使用字符集的方式可以有以下几种方式: 第一种: [root@Testa-www tmp]# echo $L ...
- Robots.txt - 禁止爬虫(转)
Robots.txt - 禁止爬虫 robots.txt用于禁止网络爬虫访问网站指定目录.robots.txt的格式采用面向行的语法:空行.注释行(以#打头).规则行.规则行的格式为:Field: v ...
- java 获取文件列表,并按照文件名称排序
需求:获取全部的日志文件,并按照文件名称倒序排列,把最新的文件放在最前1.获取全部的日志文件:(方法:public List<String> ergodic(File file,List& ...