首页 > 代码库 > Javascript call和apply的模拟实现
Javascript call和apply的模拟实现
一、开始
我们先看下原生call做了什么事
function bar(name,age){ this.hobby = ‘shopping‘; console.log(this.value); console.log(this.hobby); console.log(name); console.log(age); } bar.prototype.friend = ‘kevin‘; var obj = { hobby: ‘gamming‘ } var hah = bar.call(obj,‘jack‘,18);
输出是:
这说明call只是修改了this的指向,没有返回对象。
二、模拟实现
所以我们只要尝试着去修改this的指向并执行就行了,不需要有返回值:
Function.prototype.calls = function(){ var dir = arguments[0]; var args = []; for(var i = 1; i < arguments.length; i++){ args.push(arguments[i]) }; dir.pau = this; // 这里用到了ES6的新特性,不好 dir.pau(...args); delete dir.pau; }
如果不像用es6,我看别人的方法则是用了eval,但我不懂eval……
eval(‘dir.pau(‘ + args +‘)‘); delete dir.pau;
三、apply
apply只是把call一个一个参数传递的形势变成直接传递一个数组而已,并没有多大变化,这里就不继续写了
Javascript call和apply的模拟实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。