js手写call,apply,bind函数
程序员文章站
2022-07-14 14:19:02
...
首先是手写call函数,call函数第一个参数是this要指向的对象,第二及后面的参数就是原函数的参数
Function.prototype.myCall=function(context,...args){
if(!typeof this==='function'){return;}//判断是否是函数调用
context=typeof context==='object'?context:window;//判断传入的是否是对象,不是则为window
var key=Symbol()
context[key]=this;
const result=context[key](...args)
delete context[key];
return result;}
接下来是apply函数,实际和call函数也差不多,只不过第二个参数是数组
Function.prototype.myApply=function(context,args){
if(!typeof this==='object'){return;}
context=typeof context=='object'?context:window;
var key=Symbol();
context[key]=this;
const result=context[key](...args);
delete context[key]
return result;}
最后是bind函数,它不会立即执行,而是返回一个函数
Function.prototype.myBind=function(obj){
var self=this;
var args=Array.prototype.slice.call(arguments,1);
var fn=function(){}
var binds=function(){
var that=this instanceof self?this:obj;
return self.apply(that,args.concat(Array.prototype.slice.call(arguments));
}
if(this.prototype){
fn.prototype=this.prototype}
binds.prototype=new fn();
return binds
}
上一篇: python-双端队列
推荐阅读
-
js的继承方法小结(prototype、call、apply)(推荐)
-
javascript中call apply 与 bind方法详解
-
js中的call bind apply简单分析
-
javascript中apply、call和bind的使用区别
-
【THE LAST TIME】this:call、apply、bind
-
Javascript函数内置方法call/apply实例讲解
-
javascript基于原型链的继承及call和apply函数用法分析
-
js中apply和Math.max()函数的问题及区别介绍
-
使用 js 简单的实现 bind、call 、aplly代码实例
-
Javascript中apply、call、bind的用法讲解