审核中~
溜忙之道
首页
溜忙手册
offer之道
项目Git
写文章
登录
·
注册
登录
没有账号,去注册
注册
已有账号,去登录
博客
实现apply/call
南易_站长
阅读量:3643
关注
实现apply/call
## call()和apply()的作用 准确的来说,**apply()的作用就是合并方法和对象的方法和属性,并将方法和对象的this指向合并后的对象。** ## call() 和 apply() 之间的区别 不同之处是: call() 方法分别接受参数。 apply() 方法接受数组形式的参数。 如果要使用数组而不是参数列表,则 apply() 方法非常方便。 ## 实现 #### call ```js Function.prototype.call2 = function (context,...args) { let context = context ? context : window; let args = args ? args : []; let key = Symbol(); context[key] = this; //this指向函数,a.call(),==> this指向a let res = context[key](...args); delete context[key]; return res; } ``` #### apply ```js Function.prototype.apply2 = functon(ct,args){ ct = ct||window; args = args ||[]; let key = Symbol(); ct[key] = this; let res = ct[key](...args); delete ct[key] return res } ``` #### bind ``` Function.prototype.bind2 = function (context) { if (typeof this !== "function") { throw new Error("Function.prototype.bind - what is trying to be bound is not callable"); } var self = this; var args = Array.prototype.slice.call(arguments, 1); var fNOP = function () {}; var fBound = function () { var bindArgs = Array.prototype.slice.call(arguments); return self.apply(this instanceof fNOP ? this : context, args.concat(bindArgs)); } fNOP.prototype = this.prototype; fBound.prototype = new fNOP(); return fBound; } ```
评论
表情
发送
0
评论