今天,我们继续研究绑定
功能的实现,我们也知道垫片和polyfill,现在总结,
如果(!
函数.原型.绑定){
function.prototype.bind =功能(o){
如果(typeof这!=函数){
事情可能 / /亲密的ECMAscript 5内部iscallable功能
抛出TypeError(function.prototype.bind -什么是想肯定不是));
}
无功aargs = array.prototype.slice.call(
参数1),
这ftobind =,
浮点空
操作=函数(){ },
fbound =函数(){
返回ftobind.apply(这是浮点空操作流)
这
| |:此窗口,
AArgs.concat(array.prototype.slice.call(参数)));
};
fnop.prototype = this.prototype;
fbound.prototype =新的浮点空操作();
返回fbound;
};
}
这是官方
文件的
执行,我有两个方面来谈我想说的话。
第一个是参数,参数的使用
无功aargs = array.prototype.slice.call(参数1)。这里是绑定函数的参数数组,和第一个参数不是(不就),即要绑定的对象,其次是。
AArgs.concat(array.prototype.slice.call(参数)));这是使用数组的数组参数,参数是插在后面,注意,这个函数是返回执行,他的参数数组参数数组,fbound函数返回,所以两阵列下的参数不一位喜欢阿谀奉承。
第二个是上下文,上下文的变化很难理解,绑定函数主要用于绑定上下文。
ftobind =这是
保存对象的上下文,和以下应用
方法允许对象被绑定到上下文中使用
fnop.prototype = this.prototype;
fbound.prototype =新的浮点空操作();
这里是浮点空操作为中介对fbound this.prototype对原始对象的
属性,以确保fbound执行的时代
背景defined.originally
bound.prototype = self.prototype可以整合原有的属性,但这两个对象属性都指向同一个地方。
修改bound.prototype会造成self.prototype改变。这不是我们的初衷。所以通过一个空函数,NOP做转移,可以有效防止这种
情况的发生。
在
原生js绑定的功能上面的简单实现,萧边
分享了你的全部内容。我希望能给你一个
参考,希望你能
支持它。