JavaScript基础 this、作用域、构造函数

一、作用域

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script type="text/javascript">
            // 作用域:指每一个变量的作用的范围
            // 在js中一共有两种作用域:
            //1.全局作用域
            // 直接编写在script标签中的js代码,都在全局作用域
            // 在全局作用域中有一个全局对象window,它代表的是一个浏览器的窗口
            // 在全局作用域中创建的变量都会作为window对象的属性保存
            //              创建的函数都会作为window对象的方法保存
            var a = 10;
            var b = "hello";
            console.log(window.a);
            console.log(window.b);
            
            //2.函数作用域
            // 调用函数时创建函数作用域,函数执行完毕以后,函数作用域销毁
            // 每调用一次函数就会创建一个新的函数作用域,他们之间是互相独立的
            // 在函数作用域中可以访问到全局作用域的变量
            // 在全局作用域中无法访问到函数作用域的变量
            // 当在函数作用域中操作一个变量时,它会先在自身作用域中寻找
            // 如果有就直接使用,如果没有则向上一级寻找,直到找到全局作用域
            // 如果全局作用域中依然没有找到,则会报错
            // 在函数中要访问全局变量可以使用window对象
            var a = 10;
            function fun(){
                var a = "函数值的变量a"
                // console.log("a = "+a);
                function fun2(){
                    console.log("a = "+a);   ------>结果是 函数值的变量a
                }
            }
            fun2();
        </script>
    </head>
    <body>
    </body>
</html>

二、基础 this

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script type="text/javascript">
            // 解析器在调用函数每次都会向函数内部传递一个隐含的参数
            // 这个隐含的参数就死this,this指向的是一个对象
            // 这个对象我们称为函数执行的上下文对象
            // 根据函数的调用方式不同,this会指向不同的对象
            // 1.以函数的形式调用时,this永远都是window
            // 2.以方法的形式调用时,this就是调用方法的那个对象
            var name = "全局";
            function fun(){
                console.log(this.name);
            }
            // 创建两个变量
            var obj = {
                name:"孙悟空",
                sayname:fun
            };
            var obj2 = {
                name:"猪八戒",
                sayname:fun
            };
            
            obj.sayname();   ------>结果为 孙悟空
            obj2.sayname();   ------>结果为 猪八戒
            fun();   ------>结果为 全局
        </script>
    </head>
    <body>
    </body>
</html>

三、构造函数

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script type="text/javascript">
            // 创建一个构造函数,专门用来创建Person对象
            // 构造函数就是一个普通的函数,创建方式和普通函数没有区别
            // 不同的是构造函数习惯首字母大写
            // 构造函数和普通函数的区别就是调用方式的不同
            // 普通函数是直接调用,而构造函数需要使用new关键字来调用
            
            // 构造函数的执行流程:
            // 1.立即创建一个新的对象
            // 2.将新建的对象设置为函数中的this,在构造函数中可以使用this来引用新建的对象
            // 3.逐行执行函数中的代码
            // 4.将新建的对象作为返回值返回
            
            // 使用同一个构造函数创建的对象,我们称为一类对象,也将一个构造函数称为一个类
            // 我们将通过一个构造函数创建的对象,称为是该类的实例
            
            // this的情况:
            // 1.当以函数的形式调用时,this是window
            // 2.当以方法的形式调用时,谁调用方法this就是谁
            // 3.当以构造函数的形式调用时,this就是创建的那个对象
            
            function Person(name , age , gender){
                this.name = name;
                this.age = age;
                this.gender = gender;
                this.sayName = function(){
                    alert(this.name);
                };
            }
            
            var per = new Person("你好" , 18 , "");
            var per2 = new Person("你好" , 18 , "");
            var per3 = new Person("你好" , 20 , "");
            
            var dog = new Dog();
            
            console.log(per);
            console.log(per2);
            console.log(per3);
            
            // 使用instanceof可以检查一个对象是否是一个类的实例
            // 如果是,则返回true;否则返回false
            console.log(per instanceof Person);
        </script>
    </head>
    <body>
    </body>
</html>

 

posted @ 2021-04-21 17:51  hapuluosi  阅读(52)  评论(0编辑  收藏  举报