JS 核心语言基础语法 之 面向对象第三讲this

举报
hwJw19 发表于 2020/08/11 15:28:56 2020/08/11
【摘要】 this,在js中是个容易让人晕头转向的小东东,因为有的时候,你弄不清楚this的指向,正常情况下使用this,记住一句话就够用了“谁最终调用,就指向谁”,但是当你使用call或者apply方法时,需要注意this的指向会被改变。下面我们先来看下this的指向,具体有哪几种:第一种情况:当this作为函数来调用的时候,this指向全局window window.name = "...

this,在js中是个容易让人晕头转向的小东东,因为有的时候,你弄不清楚this的指向,正常情况下使用this,记住一句话就够用了“谁最终调用,就指向谁”,但是当你使用call或者apply方法时,需要注意this的指向会被改变。下面我们先来看下this的指向,具体有哪几种:

图片.png

第一种情况:当this作为函数来调用的时候,this指向全局window

        window.name = "globalName";        var myObj = {
            name:"sven",
            getName:function(){
                alert(this.name);
            }
        };
        myObj.getName(); //sven
        var getName = myObj.getName; 
        getName(); //globalName

第二种情况:当this作为对象的方法和属性来调用的时候,this指向该对象

        var obj = {
            a:1,
            getA: function(){
                alert(this === obj);    //true
                alert(this.a);        //1            }
        };
        obj.getA();

第三种情况:当this作为构造函数来调用的时候,this指向创建出来的新对象

        var myClass = function(){            this.name = 'sven';
        };        var obj = new myClass();
        alert(obj.name);

第四种情况:让this强制指向某个对象,call,apply

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id="div1">我是div1</div>
    <script>
        document.getElementById = (function(func){
            return function(){
                return func.apply(document, arguments);
            }
        })(document.getElementById);
        var getId = document.getElementById;
        var div = getId('div1');
        console.log(div);
    </script>
</body>
</html>

以上就是关于js中this指向问题的总结,第四种情况呢,示例使用的是apply方法,也可以使用call方法,只不过二者传的参数不同而已~


关于导图中设计模式这一部分的知识呢,我不打算在JS 核心语言基础语法这一系列的课程里分享啦,我还没有完全整理好,以后整理清晰了,再分享给大家,那JS 核心语言基础语法这个系列的知识点,就跟大家一起总结分享完啦~


寄语共勉:有种力量叫放大目标,有种智慧叫把问题缩小,我们的终极目标是学好JavaScript,小目标是尽量掌握好每个小知识点~


拜拜~


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。