Js--this的绑定

this的绑定

文章目录


提示:以下是本篇文章正文内容,下面案例可供参考

一、为什么需要this?

示例:。类中的方法(特别是实例方法)中,this代表的是当前调用对象如果不使用this使用类名称调用 后续维护如果更改名称(obj => obj2)类中的各个名称也要修改维护麻烦 使用this则更加方便便于维护

 

二、this的绑定规则

1.默认规则的优先级最低

代码如下(示例):

function foo() {
   console.log(this)
}

var obj = {
  name: 'why',
  foo: foo
}

obj.foo()//输出 obj

2.显示绑定优先级高于隐式绑定

代码如下(示例):

function foo() {
   console.log(this)
}

var obj = {
    name: "obj",
    foo: "foo.bind("aaa")
}

obj.foo()

控制台输出: aaa 而不是 obj

var obj = {
  name: 'obj',
  foo: function() {
    console.log(this)
  }
}

obj.foo.call('abc)//abc
obj.foo.apply('abc)//abc

结论:call/apply的显示绑定高于隐式绑定

3.new绑定优先级高于隐式绑定

代码如下(示例):

var obj = {
  name: 'obj',
  foo: function() {
    console.log(this)
  }
}

var f = new obj.foo()//输出 foo()

4.new绑定优先级高于bind

代码如下(示例):

function foo() {
   console.log(this)
}
var bar = foo.bind('aaa')
var obj = new bar()

//输出结果为 foo

三、this的绑定规则之外

1.忽略显示绑定

function foo() {
  console.log(this)
}

var obj = {
  name: 'why'
}

foo.call(obj)//obj对象
foo.call(null)//window
foo.call(undefined)//window

var bar = foo.bind(null)
bar()//window

结论:如果在显示绑定中传入一个 nul 或 undefined 那么这个显示绑定会被忽略 使用默认规则

2.间接函数引用

function foo() {
  console.log(this)
}

var obj1 = {
  name: 'obj1',
  foo: 'foo'
};

var obj2 = {
  name: 'obj2'
}

obj1.foo();// obj1对象
(obj2.foo = obj1.foo())(); // 间接函数引用 此次相当于 独立函数调用 控制台输出 window

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值