关于利用call bind 类数组转数组和用他们判断对象里是否有对应的属性值?

clipboard.png
如图所示。
call bind 合起来用不是很理解。为什么这样写。
还请各位大佬解释一番。感激不尽

阅读 1.6k
2 个回答

首先不能使用Function.bind,因为这是替换Function的指针,也就是Function({a:1})当然报错。
其次,为什么要用Function.call.bind,他可以帮我们替换hasOwnPropertythis,并且把除了this的这个参数扔进hasOwnProperty里执行。

这类似于

var mycall = function(thisArg, ...args) {
    let fn = this.bind(thisArg);
    return fn(...args)
}

var hasOwnKey2 = mycall.bind(Object.hasOwnProperty);
hasOwnKey2({ a: 1 }, 'b')

这么写没有任何意义,徒增代码复杂度而已。

原因直接看代码:

Function.call.bind === Function.bind // true

------更新-----

Function.bind(xxx) 会报错, 因垂死听.

具体原因应该是

Function.bind会生成的native code函数,如果参数是对象类型会变成:

(function anonymous([object Object]
) {
d
})

普通类型没事。

Function.call.bind 会生成一函数,这个函数参数什么的不会被改造成上面的形式。

本质原因? 不清楚

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题