不能理解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>
========================