JavaScript中的继承链
继承链 类别 备注 constructor prototype __poroto__ (构造)函数 函数即对象 指向Function 指向一个constructor为自身的空对象 对象 指向创建该对象的构造函数 源于创建该对象的构造函数的显式原型 Function 是所有构造器的源头 指向自身 对象的constructor指向自身 Object Object.prototype是所有原型的源头 指向Function 是一个constructor指向自身的空对象 参考于: 面向对象的继承 基于对象的原型实现 1object.__proto__ = obj 指向一个对象 基于构造函数的原型实现 1Object.prototype 指向一个空对象 继承常见的几种方式 原型链继承: 原型与对象继承; 只继承于原型 问题: 实际上并不是真正的继承, 其实是多个构造函数之间共享一个对象(属性和方法) 创建子类的对象时, 不能向父级的构造函数传递任何参数。 原型式继承 借助构造函数: apply() ...
JavaScript下的算法基础
前言声明 此篇文章的学习内容来自博主whitsats的算法基础课程。 Hash-两数之和 题目 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 123给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1] 接替思路 第一种方式:暴力破解 这种方式很简单,挨个遍历寻找合适的即可。这种方式的时间复杂度为O(n2)O(n^2)O(n2)。 123456789101112131415function twoSum(arr, tar) { for (var i = 0; i < arr.length; i++) { for (var j = 0; j < arr.length; j++) { if (arr[i] + arr[j] === t ...
23严格模式
概述 严格模式是什么 严格模式是Javascript中的一种限制性更强的変种方式。严格模式不是一个子集:它在语义上与正常代码有着明显的差异。 不支持严格模式的刘览器与支持严格模式的浏览器行为上也不一样,所以不要在未经严格模式特性测试情况下使用严格模式。 严格模式可以与非严格模式共存,所以脚本可以逐渐的选择性加入严格模式。 严格模式的目的 首先,严格模式会将Javascript陷阱直接变成明显的错误。 其次,严格模式修正了一些引擎难以优化的错误:同样的代码有些时候严格模式会比非严格模式下更快 第三,严格模式禁用了一些有可能在未来版本中定义的语法。 开启严格模式 全局开启严格模式 只需要在全局写以下字符串即可。作用于全局作用域 123"use strict";a = 100;console.log(a); 函数开启严格模式 在函数内写以下字符串即可。只作用于函数作用域。例如: 12345function fn() { "use strict"; v = 200; console.log(v);} 变量 禁止意 ...
22this关键字
概述 this是什么 this文键字是Javascript中最复杂的机制之ー。它是一个很特别的关键字,被自动定义在所有函数的作用域中。但是即使是非常有经验的 Javascript开发者也很难说清它到底指向什么。 实际上, Javascript中this的机制井没有那么先进,但是开发者往往会把理解过程复杂化。亳不夸张地说,不理解它的含义,大部分开发任务都无法完成。 this都有一个共同点,它总是返回一个对象。简单说,this就是属性或方法“当前”所在的对象。 为什么使用this this提供了一种更优雅的方式来隐式“传递”一个对象引用,因此可以将API设计得更加简洁井且易于复用。 随着使用模式越来越复杂,显式传递上下文对象会让代码变得越来越混乱,使用this则不会这样。 调用位置 想要了解this的绑定过程,首先要理解调用位置:调用位置就是函数在代码中被调用的位置(而不是声明的位置) 通常来说,寻找调用位置就是寻找“函数被调用的位置”。最重要的是要分析调用栈(就是为了到达当前执行位置所调用的所有函数 函数调用 12345678910var v = 100;// this 经常 ...
21错误与异常
错误与异常是什么 错误,指程序中的非正常运行状态,在其它编程语言中称为“异常”或“错误”。解释器会为每个错误情形创建并抛出一个Error对象,其中包含错误的描述信息。 通过使用Javascript提供的异常处理语句,可以用结构化的方式来捕捉发生的错误,让异常处理代码与核心业务代码实现分离。 错误与异常处理在应用中的重要性是毋庸置疑的。任何有影响力的Web应用都需要一套完善的错误处理机制。 try…catch语句 try表示标记一块待尝试的语句,如果语句出现错误,则通过catch语句进行捕捉。 1234567891011// 用于捕获指定语句块中的错误或异常try { console.log(v); //调用未定义的变量 -> 报错} catch (error) { // 用于处理try语句中的错误 // error 表示try语句中出现错误的信息 console.log("改变量未定义");} finally { // catch语句无法处理try语句中的错误或异常时,执行finally语句中的内 ...
基于面向对象的工具库练习
前期准备 全局作用域问题 解决这个问题是通过匿名函数,然后在匿名函数内创建对象,将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 当且仅 ...