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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值