1. 程式人生 > >不能理解javascript的this指向哪裡的看這裡。

不能理解javascript的this指向哪裡的看這裡。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

https://www.cnblogs.com/cyl-record/p/3472758.html

(嚴格模式,就是修改全域性函式的那個結構體的_this為undefined)

 

javascript函式的一種可行的實現

1) 存在指令碼層直接接觸不到的內部函式定義,需要用function.call去呼叫

指令碼函式定義

function a(XYZ...){ .函式實現. }

內部實現是這樣的

function internal_a(_this, XYZ...){ .函式實現.. }  <-- 這個是內部方法,指令碼不知道它的存在

function a = {_this:window, func:internal_a}   <-- 這個a有bind和call方法   內部結構

function global_call(a, XYZ...)

{

   a.func(a._this, XYZ...)

}

2)function.bind()的實現可以修改_this的值,如果_this的值為null或者undefined就直接設定_this=window; 
(把_this指向number, string也是可以的。函式內部取到的this是number或者string,可以做到與物件或windows無關)

3) 實際呼叫過程

指令碼 a(x, y, z...) => 

內部步驟

a.call(x, y, z...) => 

內部global_call(a, x, y, z...) =>

內部a.func(a._this, x, y, z...) =>

internal_a(a._this, x, y, z, ...)

===========================================

例子

<script>
var f = function () {
  document.write(this.x);
  document.write("<br>");
}

var x = 10;
var obj = {
  f: f,
  x: 20,
};

// 單獨執行
f() // 10  如果是嚴格模式 輸出undefined

// obj 環境執行
obj.f() // 20
</script>

========================