标签:
bind也不是啥新东西了 我一直使用箭头函数代替它的某些功能 也觉得它挺简单的 没做过多的研究
最近发现bind还会帮你做奇怪的事情 不光只是bind了 如下
const x = x=>{x}; x.prop = ‘x‘; const x2 = x.bind({}); //undefined console.log(x2.prop)
发现x函数上的静态属性被移除了 这并不是我想要的!有些时候 我们就是希望函数上的静态属性被继承下来!
可以这么做 把属性丢到上层原型链中
const x = x=>{x}; x.__proto__ = {prop:‘x‘,__proto__:Function.prototype} const x2 = x.bind({}); //x console.log(x2.prop)
在不支持es5的环境中 我们通过polyfill实现的 再回头来看看那些代码 如下(来自mdn)
这个跟原生的bind差别还是有的
而且上面那段代码并不能满足你 因为不想静态对象被干掉! 还得做点手脚才行!
其实 只要在上面基础上再加一句就行了 如下
fBound.__proto__ = {__proto__:this.__proto__};
这就完事儿了~
标签:
原文地址:http://www.cnblogs.com/daidaidai/p/5668607.html