本地js中绑定函数的简单实现

今天,我们继续研究绑定功能的实现,我们也知道垫片和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绑定的功能上面的简单实现,萧边分享了你的全部内容。我希望能给你一个参考,希望你能支持它。