[英]Different behaviour of two similar blocks of code in JavaScript
// 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代碼。
盡管在節點中,這兩個塊的結果相同,均為undefined和42。
因此,這里的問題是此上下文和變量名稱的選擇。
因此,當您運行代碼時, this
是window
並且窗口具有name屬性 ,但沒有x
屬性。
所以this.name === window.name
如果在代碼之前在窗口對象(例如window.x = "foo"
上定義屬性x,則將獲得與this.name
相同的結果類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.