资讯专栏INFORMATION COLUMN

被讨论难了的this关键字

Sanchi / 371人阅读

摘要:关键字是个常用的关键字它被自动生成在函数作用域里并代表函数执行环境的上下文如果在开发中不了解绑定在那个对象上会很容易出现绑定的规则默认绑定当函数独立使用没有对象属性的引用进行调用会默认绑定在全局对象或使用严格模式隐形绑定当函数被某个对象的属

this关键字

this是个常用的关键字,它被自动生成在函数作用域里.并代表函数执行环境的上下文.
如果在开发中,不了解this绑定在那个对象上,会很容易出现bug.

this绑定的规则 默认绑定

当函数独立使用,(没有对象属性的引用进行调用).
this会默认绑定在全局对象undefined.

var log = function () {
    console.log(this)
}
log() //window

使用严格模式
"use strict";
var log = function () {
    console.log(this)
}
log() //undefined
隐形绑定

当函数被某个对象的属性引用后调用.
this会绑定在该对象上.

var obj = {
    log: function () {
        console.log(this);
    }
}
obj.log() //obj
显性绑定

当函数调用时,指定函数的this绑定对象.
涉及的方法有callapplybind.

var log = function () {
    console.log(this)
}
var target = {}

var bindLog = log.bind(target)
bindLog() //target
log.call(target) //target
log.apply(target) //target
显性绑定的优先级比隐形绑定高
function log() {
    console.log(this.name)
}

var visibleObj = {
    name: "visible"
}

var hideObj = {
    name: "hide",
    log: log
}

hideObj.log.call(visibleObj) //visible
new绑定

当实例一个构造函数时.
构造函数的this会绑定在实例上.

function construct(tag) {
    this.tag = tag;
}

var instance = new construct("instance")
console.log(instance.tag) //instance

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/95860.html

相关文章

  • 为什么我们的web前端变的越来越复杂

    摘要:我们不能迷失在各种新技术里,主要我们就会把简单的问题度复杂化了,会把我们的前端变的很复杂。我们的代码变得怪异难懂我不知道从什么时候,前端的代码写的越难懂就越能显示水平。 前端发展了也有些年头了,曾记得很多年前,聊起前端,都觉得是很简单,那个时候都没有前端工程师这个职位。可现在,前端已经逆袭了,已经不是原来的样子了,各种技术层出不穷,显的越来越高深莫测了。前端真的变得那么难了吗?在我看来...

    LMou 评论0 收藏0
  • 为什么我们的web前端变的越来越复杂

    摘要:我们不能迷失在各种新技术里,主要我们就会把简单的问题度复杂化了,会把我们的前端变的很复杂。我们的代码变得怪异难懂我不知道从什么时候,前端的代码写的越难懂就越能显示水平。 前端发展了也有些年头了,曾记得很多年前,聊起前端,都觉得是很简单,那个时候都没有前端工程师这个职位。可现在,前端已经逆袭了,已经不是原来的样子了,各种技术层出不穷,显的越来越高深莫测了。前端真的变得那么难了吗?在我看来...

    Y3G 评论0 收藏0
  • 为什么我们的Web前端变的越来越复杂

    摘要:我们不能迷失在各种新技术里,主要我们就会把简单的问题度复杂化了,会把我们的前端变的很复杂。我们的代码变得怪异难懂我不知道从什么时候,前端的代码写的越难懂就越能显示水平。 前端发展了也有些年头了,曾记得很多年前,聊起前端,都觉得是很简单,那个时候都没有前端工程师这个职位。可现在,前端已经逆袭了,已经不是原来的样子 了,各种技术层出不穷,显的越来越高深莫测了。前端真的变得那么难了吗?在我看...

    davidac 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<