基于面向对象的工具库练习
前期准备 全局作用域问题 解决这个问题是通过匿名函数,然后在匿名函数内创建对象,将window作为参数传入匿名函数,并将此对象赋值与window 12345678910(function (global) { // 判断global对象是否真的存在 if (!global) { console.error("当前环境不是浏览器环境!"); return false; } // 定义一个统一对外开放的对象 var mytool = new Object(); global.mytool = mytool;})(window); 此时在全局作用域中便存在了一个对象mytool。 选择器 实现一个选择器,用于替代getElementById、getElementsByClassName、getElementsByTagName三种获取方式。 实现方式,将需要搜索的标签名(id,class,tagname)传入方法参数,通过内部处理返回一个数组。 对于id选择器或class选择器来说,传入形参为#id或. ...
20继承
原型链 原型链是什么 如果构造函数或对象A,A的原型指向构造函数或对象B,B的原型再指向构造函数或对象C,以此类推,最终的构造函数或对象的原型指向Objecte的原型。由此形成一条链状结构,被称之为原型链。 按照上述的描述,在B中定义的属性或方法,可以直接在A中使用井不需要定义。这就是继承,它允许每个对象来访问其原型链上的任何属性或方法。 原型链是ECMAScript标准中指定的默认实现继承的方式。 123456789101112131415161718192021222324252627// 此方法实现继承并不好,不建议使用function A() { this.a = "a";}// 通过构造函数创建对象var a = new A();function B() { this.b = "b";}// 将B的原型指向对象aB.prototype = a;var b = new B();console.log(b.a); //aconsole.log(b.b); //bconsole.log(b.c) ...
19原型
原型 原型是什么 在 Javascript中,函数是一个包含属性和方法的Function类型的对象。而原型( Prototype)就是Function类型对象的一个属性。 在函数定义时就包含了 prototype属性,它的初始值是一个空对象。在 Javascript中井没有定义函数的原型类型,所以原型可以是任何类型。 原型是用于保存对象的共享属性和方法的,原型的属性和方法并不会影响函数本身的属性和方法。 原型的默认值是空对象,所有引用类型都是构造函数,所有函数都具有prototype属性。 123456789101112131415// Function 类型的属性 -> 所有函数都具有的属性console.log(Function.prototype);function fn() { console.log("this is function");}// 原型的默认值是空对象console.log(fn.prototype);// 函数包含构造函数 -> 所有引用类型都是构造函数console.log(Number.proto ...
18Function类型
Function类型 Function类型与函数 函数是这样的一段 Javascript代码,它只定义一次,但可能被执行或调用多次。 Function类型是 JavaScript提供的引用类型之一,通过 Function类型创建 Function对象。 在Javascript中,函数也是以对象的形式存在的。每个函数都是一个 Function对象。 函数名,本质就是一个変量名,是指向某个Function对象的引用。 每一个函数都是一个Function类型的函数、 12345678910111213function fn() { console.log("this is fn function");}var f = function () { console.log("this is f function");};// 函数是一个对象console.log(fn instanceof Object); //trueconsole.log(f instanceof Object); //true// 函数 ...
17Object对象
Object对象 创建对象的三种形式 创建空对象 12var obj1 = new Object(null);var obj2 = new Object(undefined); 创建一个与给定值对应类型的对象 12var obj3 = new Object(100);console.log(obj3); //[Number: 100] 当以非构造函数形式被调用时,Object 等同于 new Object()。 12var obj4 = Object(); //函数调用var obj5 = new Object(); //构造函数调用 属性描述符 Javascript提供了一个内部数据结构,用于描述对象的值,控制其行为,例如该属性是否可写、是否可配置、是否可修改以及是否可枚举等。这个内部数据结构被称为“属性描述符”。 对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。 数据描述符 键 值 默认值 value 该属性对应的值,可以是任何有效的Javascript值(数值,对象,函数等)。 undefiend writable 当且仅 ...
16JavaScript的面向对象
JavaScript中的面向对象 面向对象是什么 面向对象编程的全称为 Object Oriented Prograrnming,简称为OOP。面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式。 面向对象编程可以看作是使用一系列对象相互协作的软件设计。面向对象程序设计的目的是在编程中促进更好的灵活性和可维护性。凭借其对模块化的重视,面向对象的代码开发更简单,更容易理解。 所有的程序是由一定的属性和行为对象组成的,不同的对象的访问通过函数调用来完成,对象间所有的交流都是通过方法调用,通过对封装对象数据,提高复用率。 面向对象编程的三个主要特征是:封装;2)继承;3)多态。 任何事物都可以看作对象,相似的可以看作一类。类是群体,对象是个体。 JavaScript是一种基于原型的面向对象语言,而不是基于类的。 封装 只关心入口和出口,而不关心过程 继承 继承通常是指类与类之间的关系。如果两个类都有相同的属性或方法,那么可以让一个类继承于另类,这样就不需要在前者再次定义同样的属性或方法。 多态 不同的对象可以定义具有相同名称的方法,方法是作用于所在的对象中。这种不同对象 ...
15BOM编程艺术
BOM编程艺术 什么是BOM BOM的全称为 Browser Object Model,被译为浏览器对象模型 BOM提供了独立于HTML页面内容,而与浏览器相关的一系列对象。主要被用于管理浏览器窗口及与测览器窗口之间通信等功能。 BOM由一系列对象构成,这些对象可以简单理解为是由各个览器所提供的,例如 Window对象等。 Window对象 window对象是BOM中最核心的对象 全局作用域 在浏览器环境中运行javascript逻辑时,在全局作用域中定义的对象、变量和函数都是Window对象的属性和方法。 123456789101112131415var test = 666console.log('test:', test)console.log('windows.test:', window.test)function t() { console.log('this is function')}t()window.t()delete window.testconsole.log(& ...
14表单操作
表单操作 获取表单 获取表单元素 通过常规方式 Document对象方式。document.getElementById('form')等。 通过Document的属性forms document.forms 返回结果为HTMLCollection。 通过表单的name名字。 此方法不推荐。因为在新版本的浏览器中可能不再支持。 如果返回结果为一个时类型为对象,多个时是集合。 获取表单组件元素 常规方式 Document对象方式。document.getElementById('form_input')等。 通过表单元素的属性elements 12var f = document.forms[0]console.log(f.elements) 表单操作 文本框的操作 选择当前文本框的所有内容 1234567<form action="#" id="myform"> <input type="text" id="username" name=& ...
五一假期小作业
JS 版星级评分 如图所示,在曾经曾用 CSS3 的方案实现过。现在用 JavaScript 重新实现。 演示地址:https://antmoe.gitee.io/project/2020/05/01/index.html 遇到的问题 JavaScript 不能直接操纵伪类元素,因此只能用控制类的方式 没有搞明白三种状况 第一次点击 第二次点击是加星还是减星 判断循环判断循环(代码太烂) 部分过渡动画存在一定缺陷 嵌套过于多(代码太烂) 解决方案 由于五个五角星的实现依靠五个一模一样的<i>标签,因此使用事件委托方式 定义一个列表,用于存储当前页面中的所有星(<i>标签) 定义一个变量,用作用户是否第一次操作的标志。(即判断是否是第一次操作) 如果是第一次操作,那么直接循环添加类名即可 不是第一次操作,需要判断是否添加过类名 在用户第一次操作后,需要判断是加星还是减星 即判断当前点击的元素是否含有星 如有有星星,取消右边和当前点击的星 如果没有星,将左边所有未点亮的星和当前点击的星点亮 示例代码 123456789101 ...
JS基本事件案例练习
一、永远点不到的方块 示例:https://antmoe.gitee.io/project/2020/04/25/1.html 实现思路: 获取当前浏览器窗口的宽度和高度 既然是随机显示,那么位置不能超出当前浏览器的窗口。 获取div的宽度 计算宽度高度的最大值 也就说小方块移动的位置的边界。 为元素注册click(mouseover)事件 也就是鼠标点击(悬停)时触发的事件 click:点击事件 mouseover:悬停事件 源代码 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width ...













