// Block - 1
var moduleToBind = {
name: 42,
getName: function() {
return this.name;
}
}
var unboundGetName = moduleToBind.getName;
console.log(unboundGetName());
var boundGetName = unboundGetName.bind(moduleToBind);
console.log(boundGetName());
// End Block -1
// Output :
//
// 42
// Block - 2 having similar code
var module = {
x: 42,
getX: function() {
return this.x;
}
}
var unboundGetX = module.getX;
console.log(unboundGetX());
var boundGetX = unboundGetX.bind(module);
console.log(boundGetX());
// End Block - 2
// Output :
// undefined
// 42
我检查了Chrome版本67.0.3396.87(正式版本)(64位)和Firefox版本60.0.2(64位)中的JavaScript代码。
尽管在节点中,两个块的未定义结果相同,均为42。
答案 0 :(得分:1)
因此,您的问题是此上下文和变量名称的选择。
因此,运行代码时,this
是window
,并且窗口具有name property,但是它没有x
属性。
所以this.name === window.name
如果在代码之前在窗口对象(例如window.x = "foo"
)上定义属性x,则会得到与this.name
相同的结果类型。