像这样:
const a = (arg0, arg1, arg2) => {
console.log(arg0);
};
const b = a.bind(null, 1, 2, 3)
现在假设我只有 b ,是否可以获得a的预绑定值列表?我的意思是值1,2,3
如果有可能,怎么样?
答案 0 :(得分:1)
如果您编写自己的绑定函数,则可以为其附加新属性,函数可以像任何其他对象一样添加属性。
function bind(fn, thisArg, ...boundArgs) {
const func = function(...args) {
return fn.call(thisArg, ...boundArgs, ...args)
}
// you can hide the properties from public view using
// defineProperties, unfortunately they are still public
Object.defineProperties(func, {
__boundArgs: { value: boundArgs },
__thisArg: { value: thisArg },
__boundFunction: { value: fn }
})
return func
}
const a = (a, b, c) => console.log(a, b, c)
const b = bind(a, null, 1, 2, 3)
b()
console.log(b.__boundArgs)
console.log(b.__thisArgs)
console.log(b.__boundFunction)
<script src="http://codepen.io/synthet1c/pen/WrQapG.js"></script>
Function.prototype.bind
的第一个参数是this
arg。
要回答这个问题,如果您使用的是chrome,则可以在绑定函数的属性[[BoundArgs]]
中访问该信息。运行代码并检查您的控制台
const a = (arg0, arg1, arg2) => {
console.log(arg0, arg1, arg2);
};
const b = a.bind(null, 1, 2, 3)
b()
console.dir(b)