“`” 参考回答:

原理:通过apply或者call方法来实现。

(1)初始版本

<pre><code class=""language-javascript"" lang=""javascript"">Function.prototype.bind=function(obj,arg){
var arg=Array.prototype.slice.call(arguments,1);
var context=this;
return function(newArg){
arg=arg.concat(Array.prototype.slice.call(newArg));
return context.apply(obj,arg);
}
}
</code></pre>

(2) 考虑到原型链

为什么要考虑?因为在new 一个bind过生成的新函数的时候,必须的条件是要继承原函数的原型

<pre><code class=""language-javascript"" lang=""javascript"">Function.prototype.bind=function(obj,arg){
var arg=Array.prototype.slice.call(arguments,1);
var context=this;
var bound=function(newArg){
arg=arg.concat(Array.prototype.slice.call(newArg));
return context.apply(obj,arg);
}
var F=function(){}
</code></pre>

//这里需要一个寄生组合继承

<pre><code class=""language-javascript"" lang=""javascript"">F.prototype=context.prototype;
bound.prototype=new F();
return bound;
}
</code></pre>

 

<pre><code> "“`

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.