青春须早为,岂能长少年。这篇文章主要讲述学习之apply,call,bind实现相关的知识,希望能为你提供帮助。
目录
- apply
- call
- bind
- demo
Function.prototype.applyCopy = function(context) {
context.fn = this;
// 谁调用 this就是谁
var args = arguments[1];
if(!args || args.length == 0) return context.fn();
var result = eval('
context.fn("
'
+args.toString()+'
"
)'
);
delete context.fn;
return result;
};
call
Function.prototype.callCopy = function(context) {
var args = [].shift.applyCopy(arguments);
return this.applyCopy(this, [args]);
}
bind
Function.prototype.bindCopy = function(context) {
var fn = this;
return function() {
return fn.apply(context, arguments[1]);
}
}
demo
var s = {
desc: '
s.desc'
,
name: '
你好'
,
}var name = '
window'
;
var desc = '
window =>
this'
function sayHi() {
return {
name: this.name,
desc: this.desc,
}
}console.log(sayHi());
console.log(sayHi.bindCopy(s)());
console.log(sayHi.call(s));
console.log(sayHi.apply(s));
【学习之apply,call,bind实现】总结:apply是基础,call,bind都是在apply的基础上实现的。
推荐阅读
- Eclipse中Web项目修改名称后出现Attribute "xmlns" was already specified for element "web-app"
- HtmlSpanner 使用小结 -- 安卓解析html
- Android 线程处理
- 使用AndroidStudio开发cocos2d-x时,可能会出现的问题
- 三维地图app的发展,离不开Infortrend GSe Pro 高效NAS共享
- appium 连接夜神模拟器提示adb版本不匹配的解决方法(adb server version (36) doesn't match this client (41); killing...
- 10—mybatis通用mapper插件 pagehelper 分页
- Centos 中 TCPWrappers访问控制
- create-react-app创建项目后,运行npm run eject报错解决方法