我需要你的帮助。我被这些代码行困住了
var bind = Function.call.bind(Function.bind);
bind(CC, Components);
我试着了解它们是什么以及它们是如何工作的但是我不能: - (
感谢您的帮助。
答案 0 :(得分:3)
Function#bind
和独立bind
功能?Function#bind
对Function#bind
的调用会创建一个新函数,该函数永远绑定到作为第一个参数传递的上下文。 Function#bind
在函数上作为方法运行。也就是说,您只能绑定调用Function#bind
的函数。
let str = 'Hello, World!'
let fn = () => console.log(this)
// Bind the `this` to be `str`
let boundFn = fn.bind(str)
boundFn() // => 'Hello, World!'
// Attempt re-bind:
boundFn = fn.bind('new str')
boundFn() // => 'Hello, World!'
______
Function#call
Function#call
与Function#bind
的不同之处在于执行给定的函数,其中包含上下文和任何其他参数。它不会返回新的绑定函数。
let str = 'Hello, '
let fn = (who) => console.log(this + who)
fn.call(str, 'World!') // => 'Hello, World!'
______
当我们通过引用传递函数时,我们失去了它的上下文。在这种情况下,这意味着我们不能简单地var bind = Function.bind
并将bind
称为独立函数。
let log = () => console.log('Hello, World!')
let bind = Function.bind;
bind(log) // => Uncaught TypeError: Bind must be called on a function
______
bind
您共享的代码创建了一个等同于Function#bind
的速记(独立)函数,但接受函数绑定作为其第一个参数,并接受将该函数绑定为其第二个的上下文,而不是调用bind
方法作为绑定函数的成员(例如fn.bind(ctx)
)。
// Create standalone `bind` function
let bind = Function.call.bind(Function.bind);
let obj = { hello: 'World!' }
let log = () => console.log(this)
let boundFn = bind(log, obj)
boundFn() // => { hello: 'World!' }
______
Function#bind
的情况下实现此功能?上述解决方案接受一个函数和第二个参数,它定义返回函数的上下文(this
)。我们可以通过一个辅助函数非常简单地模仿这个功能,该函数接受相同类型的参数并返回一个函数,当被调用时,使用Function#call
执行具有给定上下文和参数的函数。
例如:
function bind (fn, ctx) {
return function (...args) {
fn.call(ctx, ...args);
};
}
请注意,这与创建绑定函数不完全相同。你可以read about what happens during the creation of a bound function in 9.4.1.3 BoundFunctionCreate
in the spec。
答案 1 :(得分:2)
函数的上下文取决于它的调用方式,因此为了使速记input[placeholder='Event Date']
正常工作,您必须生成div.form-group.event-date > div.input-group > input[placeholder='Event Date']
为bind
的函数。 }。请注意this
的签名:
Function.bind
因此,此执行返回绑定到call
的函数。在您的特定情况下,它会将.call(thisArg[, arg1[, arg2[, ...]]])
绑定到Function.bind
,以便在您调用CC
时,上下文(Components
)将为CC()
。
Per @BenjaminGruenbaum你可以做this