首页 > 其他分享 >web学习笔记(三十三)

web学习笔记(三十三)

时间:2024-03-15 18:32:38浏览次数:19  
标签:__ web 三十三 函数 模式 严格 原型 笔记 属性

目录

1.严格模式

1.1严格模式的概念:

1.2严格模式在语义上更改的地方:

1.3如何开启严格模式 

1.4严格模式应用上的变化 

2.原型链


1.严格模式

1.1严格模式的概念:

      严格模式有点像es5向es6过渡而产生的一种模式,因为es6的语法要求都比较严格,而我们在es5的代码编写过程中使用严格模式会使得我们的代码更加规范,但并不是所有的浏览器都支持严格模式,只有在IE10以上版本的浏览器才会支持严格模式。

1.2严格模式在语义上更改的地方:

严格模式对正常的 JavaScript 语义做了一些更改:

  1. 消除了 Javascript 语法的一些不合理、不严谨之处,减少了一些怪异行为。
  2. 消除代码运行的一些不安全之处,保证代码运行的安全。
  3. 提高编译器效率,增加运行速度。
  4. 禁用了在 ECMAScript 的未来版本中可能会定义的一些语法,为未来新版本的 Javascript 做好铺垫。比如一些保留字如:class,enum,export, extends, import, super 不能做变量名

1.3如何开启严格模式 

"use strict" //开启严格模式,
//或者在函数内部
function(){
"use strict" //需要写在函数体内所有语句之前
}

如果将该语句直接写在script标签内部则表示开启全局严格模式。如果是写在函数内部,则表示在函数作用域内编写的代码开启严格模式。 

1.4严格模式应用上的变化 

(1)未声明的变量直接赋值输出会报错。(普通模式下不会报错,会将变量前面默认加上window然后将变量升为全局变量,可以在控制台输出变量的值)

    "use strict" //开启严格模式,如果写在函数体内部则表示只有函数内部开启严格模式。
         a = 10;
        console.log(a);//严格模式之前可以输出a的值,现在会直接报错。 

(2)不允许删除变量 (普通模式下变量没有真的被删除,但是也不会报错)

  "use strict" //开启严格模式,如果写在函数体内部则表示只有函数内部开启严格模式。 
        var b = 1;
         delete b;//严格模式下不可以删除变量,会直接报语法错误。

 (3)函数的this指向是undefined(普通模式下,普通函数的this指向window)

    <script>
      "use strict" //开启严格模式,如果写在函数体内部则表示只有函数内部开启严格模式。
        function fn() {
            console.log(this); //严格模式下函数内this指向undefined
        }
        fn();
    </script>

(4) 构造函数不加new调用,指向结果为undefined,(普通模式下,如果构造函数不使用 new 调用,this 的指向将取决于调用上下文。在非严格模式下,如果没有使用 new,而是将构造函数作为普通函数进行调用,this 会指向全局对象(在浏览器环境中是 window 对象)。)

'use strict';

        function Person(name) {
            this.name = name;
        }
        var person1 = new Person('Alice');
        console.log(person1.name); // 输出 "Alice"
        var person2 = Person('Bob'); // 没有使用 new 关键字调用构造函数  此时由于没有使用 new 关键字,this 被设置为 undefined。在这种情况下,尝试给 undefined.name 赋值会导致报错,因为 undefined 没有 name 属性。
        console.log(person2); // 输出 undefined

 (5)无论是不是在严格模式下,定时器的this指向都是window。

setTimeout(function() {
  console.log(this); //严格模式下,定时器 this 还是指向 window
}, 2000);  

2.原型链

  <script>
        // 父亲 (构造函数)
        function Person(name, age) {
            this.name = name;
            this.age = age;
            this.say = function () {
                console.log('say  person');
            }
        }
        // Person.prototype是原型对象  是一块空间 母亲  有 construtor属性和 __proto__属性
        Person.prototype.say = function () {
            console.log('asy');
        }
        Person.prototype.walk = function () {
            console.log('walk');
        }
        // 孩子 实例对象 有 construtor属性和 __proto__属性
        var p1 = new Person('TOM', 20);
        var p2 = new Person('JACK', 22);
        console.log(p1);

        p1.say();
        p2.say();
    </script> 

可以简单的理解为构造函数类似于父亲的角色,原型对象类似于母亲的角色,而实例对象类似于孩子的角色。 

 父亲(构造器)有prototype 属性,父亲(构造器)可以通过prototype 属性查找到母亲(原型对象)。

母亲(原型对象)有 construtor(构造器)属性和 __proto__(隐式原型)属性,母亲可以通过construtor属性来查找到父亲(构造函数)。同时可以通过 __proto__(隐式原型)属性来查找到父级函数的原型对象,而父级函数的隐式对象再通过 __proto__(隐式原型)属性网上查找又可以找到上一级函数的原型对象,直到找到最顶部的原型对象,此时再向上查找的结果就是null。

孩子(实例对象)有 construtor(构造器)属性和 __proto__(隐式原型)属性,孩子可以通过 __proto__(隐式原型)属性查找到母亲(原型对象),然后再通过 construtor(构造器)属性查找到父亲(构造函数)或__proto__(隐式原型)属性查找到上级母亲(原型对象)。

标签:__,web,三十三,函数,模式,严格,原型,笔记,属性
From: https://blog.csdn.net/shan33__/article/details/136742986

相关文章

  • docker命令查询笔记
    目录loginsearchpushpullimagesrmitaghistorysaveloadrunstartrestartstopkillrmpauseunpausecreateexecpsinspectstatstoprenameattachupdatelogswaitportexportimportloginlogin:登录到远程仓库登录到远程仓库后可可以拉取仓库的镜像了dockerlogin[OPTIONS][S......
  • Docker Compose基本配置及使用笔记
    DockerCompose基本配置及使用笔记简介DockerCompose是一个用于定义和运行多个Docker容器应用程序的工具。它使用YAML文件来配置应用程序的服务,并通过简单的命令集管理这些服务的生命周期。1.步骤1代码如下:docker-compose.yml放在虚拟机root目录下version:"......
  • Python之Web开发中级教程----创建Django子应用
    Python之Web开发中级教程----创建Django子应用基于上一个教程的Django项目(可以先看上一集,链接如下:)https://mp.csdn.net/mp_blog/creation/editor/1367248972.创建子应用pythonmanager.pystartappbookadmin.py:跟网站的后台管理站点配置相关。apps.py:用于配置当前应用......
  • Vue学习笔记53--消息订阅与发布
    消息订阅与发布1.订阅消息(需要数据的人):消息名称2.发布消息(提供数据的人):消息内容注:1.订阅名称和发布名称一致2.需要数据的人--订阅消息;提供数据的人--发布消息 示例一:第一步:安装支持库安装第三方支持库:pubsub.js(退出项目运行后执行以下命令,安装库文件)npmipu......
  • 技术笔记(9)MMORPG人物操作系统
    技术笔记(9)MMORPG人物操作系统希望实现的功能或目标:实现人物在场景内的移动、转向、跳跃、落地判断实现有限状态机‍学习笔记:PlayerMovementController类作用:负责玩家的行为控制挂载到Player游戏物体身上,Player游戏物体没有刚体和碰撞体,取而代之的是Characte......
  • Vue学习笔记52--全局事件总线
    Vue全局事件总线:一种组件之间通信的方式,适用于任意组件之间通信。1.所有组件,即VueComponent所有的组件实例对象vc2.每次使用VueComponent都是new一个新的vc3.Vue.prototype=VueComponent.prototype.__proto__(可以让组件实例对象vc访问到Vue原型上的属性、方法)4.$emit、$o......
  • ELK日志处理部署笔记-2
    logstash概述什么是logstash-是一个数据采集、加工处理以及传输的工具特点-所有类型的数据集中处理-不同模式和格式数据的正常化-自定义日志格式的迅速扩展-为自定义数据源轻松添加插件为什么使用logstash将日志转化为json使elasticasearch可读下载#logstash的配置文件......
  • Java面向对象的一些学习笔记
    1.Private关键字:(1)private关键字是一个权限修饰符(2)可以修饰成员变量和成员方法(3)被private修饰的成员只能在本类中才能访问(4)针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作(5)提供"setXxx(参数)"方法,用于给成员变量赋值,方法用public修饰(6)提供"getXxx(参数)......
  • MATLAB学习笔记1.数组运算
    先来介绍两个常用的,在命令行里边输入“clc”,就会清空以上的命令行(也就是这个直接与你对话的地方)的所有内容;但是并不会把已经设置的变量清空,要想清空变量,则需要在命令行中输入“clear”,这样就可以把右侧已经设置的变量都清空掉了。下面是示例输入回车再输入“clear”并输入......
  • Java学习笔记——第十六天
    集合进阶(二)Collection的其他相关知识前置知识:可变参数就是一种特殊形参,定义在方法、构造器的形参列表里,格式是:数据类型...参数名称。特点可以不传数据给它;可以传一个或者同时传多个数据给它;也可以传一个数组给它。作用常常用来灵活地接收数据。注意事项可变参数在方法......