有没有办法访问函数的预绑定值?

时间:2016-11-29 10:41:25

标签: javascript node.js bind

像这样:

const a = (arg0, arg1, arg2) => {
  console.log(arg0);
};
const b = a.bind(null, 1, 2, 3)

现在假设我只有 b ,是否可以获得a的预绑定值列表?我的意思是值1,2,3

如果有可能,怎么样?

1 个答案:

答案 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)