首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

理解jsthis

为什么使用this 如果没有this,那么我们代码会是下面的写法: 在方法中,为了能够获取到name名称,必须通过obj引用(变量名称)来获取。...但是这样做有一个很大弊端:如果我将obj名称换成了info,那么所有的方法中obj都需要换成info。...(编写位置)没有关系; 3.this绑定和调用方式以及调用位置有关系; 4.this是在运行时被绑定; this绑定规则 默认绑定 在独立函数调用情况下使用默认绑定 独立函数调用我们可以理解成函数没有被绑定到某个对象上进行调用...: 也就是它调用位置中,是通过某个对象发起函数调用。...这个和setTimeout源码内部调用有关; setTimeout内部是通过apply进行绑定this对象,并且绑定是全局对象; 案例二:数组forEach 数组有一个高阶函数forEach,用于函数遍历

3K30

前端-一篇文章理解 JS 继承

本文以《JavaScript高级程序设计》上内容为骨架,补充了ES6 Class相关内容,从我认为更容易理解角度将继承这件事叙述出来,希望大家能有所收获。 1. 继承分类 先来个整体印象。...如图所示,JS中继承可以按照是否使用object函数(在下文中会提到),将继承分成两部分(Object.create是ES5新增方法,用来规范化这个函数)。...继承方式 上图上半区原型链继承,构造函数继承,组合继承,网上内容比较多,本文不作详细描述,只指出重点。这里给出了我认为最容易理解一篇《JS继承(上)》。...如果对上半区内容不熟悉,可以先看这篇文章,再回来继续阅读;如果已经比较熟悉,这部分可以快速略过。另,上半区大量借用了yq前端一篇继承文章1。...总结 1、ES6 Class extends是ES5继承语法糖 2、JS继承除了构造函数继承之外都基于原型链构建 3、可以用寄生组合继承实现ES6 Class extends,但是还是会有细微差别

79220
您找到你想要的搜索结果了吗?
是的
没有找到

jsDOM理解

try…catch try{}catch(e) {}finally{} Error.name六种值对应信息: 1. EvalError:eval()使用与定义不一致 2....URIError:URI处理函数使用不当 复制代码 es5严格模式 “use strict” 不再兼容es3一些不规则语法。使用全新es5规范。...DOM对象即为宿主对象, 由浏览器厂商定义,用来操作html和xml功能一类对象集合。 也有人称DOM是对HTML以及XML标准编程接口。...ie7以下版本中没有,非实时 .querySelectorAll() // css选择器 在ie7和ie7以下版本中没有,非实时 复制代码 DOM基本操作 遍历节点树: parentNode ->...->后一个兄弟节点 previousSibling->前一个兄弟节点 基于元素节点树遍历 parentElement -> 返回当前元素父元素节点 (IE不兼容) (以下IE不兼容指的是 9 以下)

4.2K30

我所理解前端

入坑前端到今天也将近两年半了,这两天突然想到了第一次面试时面试官一个问题-------你怎样理解前端工作?...对于当时我一个小白而言完全是胡说一通,词不达意,搞得面试官一脸懵逼,现在想想那可能就叫尬聊吧……时隔两年在不断爬坑中对这个问题有了自己新认识,今天趁着上午没什么事情,写下这篇博客,想到哪写到哪,谈一谈我所理解前端...Js方面这时候已经可以开始挑一种主流框架进行学习了,前面提到Vue, Angular,React都是不错选择, 并且对面向对象编程,对象封装,原型继承,闭包,同步异步差异,等一系列js进阶知识应该进行深入了解...上面只是一套笼统流程,至少在前端这方面我们需要做有梳理业务逻辑并理解业务逻辑,这对你后面的开发很有用处,同时根据需求进行应用技术选择,项目结构划分,需求模块划分,完整项目的搭建,当然现在有很多可以自动化构建工具可以节省你很多时间...前端自动化构建在整个项目开发中越来越重要,但新手入门还是应该去尝试自己一点一点去构建一个项目,等你多做几个项目觉得每次都这样重复好烦,自然而然就入了自动化构建坑,毕竟这样能让你更深刻理解,为什么要使用自动化构建

811110

js构造函数理解

作为原型和原型链基础,先了解清楚构造函数以及它执行过程才能更好地帮助我们学习原型和原型链知识。 1、什么是构造函数 2、为什么要使用构造函数?...; // 创建一个新内存 #f3 每当创建一个实例时候,就会创建一个新内存空间(#f2, #f3),创建 #f2 时候,函数体内部 this 指向 #f2, 创建 #f3 时候,函数体内部...(4) 默认返回 this 由于函数体内部this指向新创建内存空间,默认返回 this ,就相当于默认返回了该内存空间,也就是上图中 #f1。此时,#f1内存空间被变量p1所接受。...也就是说 p1 这个变量,保存内存地址就是 #f1,同时被标记为 Person 实例。 以上就是构造函数整个执行过程。 4、构造函数返回值 构造函数执行过程最后一步是默认返回 this 。...首先,当用 new 关键字调用时,产生一个新内存空间 #f11,并标记为 Person1 实例;接着,函数体内部 this 指向该内存空间 #f11;执行函数体内部代码;由于函数体内部this

2.1K31

理解jsnew

new 操作符 在有上面的基础概念介绍之后,在加上new操作符,我们就能完成传统面向对象class + new方式创建对象,在Javascript中,我们将这类方式成为Pseudoclassical...基于上面的例子,我们执行如下代码 var obj = new Base(); 这样代码结果是什么,我们在Javascript引擎中看到对象模型是: ? new操作符具体干了什么呢?...成员对象 第三行,我们将Base函数对象this指针替换成obj,然后再调用Base函数,于是我们就给obj对象赋值了一个id成员变量,这个成员变量值是”base”,关于call函数用法,请参看陈皓...__特性,toString这个方法也可以做新对象方法被访问到。...于是我们看到了: 构造子中,我们来设置‘类’成员变量(例如:例子中id),构造子对象prototype中我们来设置‘类’公共方法。

3.3K40

理解js变量提升

深刻理解变量提升 当执行 JS 代码时,会生成执行环境,只要代码不是写在函数中,就是在全局执行环境中,函数中代码会产生函数执行环境,只此两种执行环境。...{ console.log('call b') } 想必以上输出大家肯定都已经明白了,这是因为函数和变量提升原因。...通常提升解释是说将声明代码移动到了顶部,这其实没有什么错误,便于大家理解。但是更准确解释应该是:在生成执行环境时,会有两个阶段。...第一个阶段是创建阶段,JS 解释器会找出需要提升变量和函数,并且给他们提前在内存中开辟好空间,函数的话会将整个函数存入内存中,变量只声明并且赋值为 undefined,所以在第二个阶段,也就是代码执行阶段...let 不能在声明前使用,但是这并不是常说 let 不会提升,let 提升了,在第一阶段内存也已经为他开辟好了空间,但是因为这个声明特性导致了并不能在声明前使用。

5.5K20

理解前端

今天我们来谈谈一个比较时髦概念- 「微前端」。 「微前端」是一套用于「组织大型前端应用指导规范」。是受后端「微服务」启发而发展而来。...虽然微前端是一个备受关注趋势性话题,但其中有一些概念是很难准确定位。当理解一个新趋势或技术时,首先需要理解它是解决哪些现存问题。...❝理解前端最简单方法是「把它们看作是对大规模应用如何进行组织一种技术解决方案」。 ❞ 对于「大型应用」来说,有许多前端团队想要快速产生,并且这些团队能够在开发流程上「互相解耦」。...这可能是设计上问题,因为微前端并不指向一个特定通用实现。这也是为什么对微前端用途会让人感到困惑原因之一。...到后来出现了基于「模块化」构建方式,分析模块之间「依赖关系」,从「入口模块」开始构建一棵「依赖图」,中间遇到用到 js、css、图片等都会作为他依赖。

41920

Node.js前端如何使用反向代理解决跨域

图片 Node.js 是一个基于 Chrome V8 引擎 JavaScript 运行环境,它让 JavaScript 在服务器端运行,并提供了丰富模块和工具来构建高性能网络应用。...Node.js 特点是单线程、异步、事件驱动、非阻塞 I/O 等,使得它能够处理大量并发请求,并且具有高效、轻量、可扩展等优势。...在使用 Node.js 前端开发时,我们可能会遇到一些问题,比如跨域和 https 协议限制。为了解决这些问题,我们可以利用反向代理。...反向代理是指一个代理服务器接收客户端请求,并将其转发给后端服务器(如 Node.js 应用),然后将后端服务器返回响应再转发给客户端。...因此,在使用 Node.js 前端开发时,我们不仅可以享受 Node.js 高性能、轻量级和可扩展性等特点,还可以通过反向代理来解决一些常见问题,并提升我们开发效率和用户体验。

1.6K50

前端JS规范

ReferenceError 对所有引用都使用 const,不要使用 var,eslint: prefer-const, no-const-assign 原因:这样做可以确保你无法重新分配引用,以避免出现错误和难以理解代码...,eslint: quote-props 原因:因为通常来说我们认为这样主观上会更容易阅读,这样会带来代码高亮上提升,同时也更容易被主流 JS 引擎优化 // bad const bad = {...如果你发现函数定义既庞大又复杂以至于不能理解文件其他部分,或许你应该将它拆分成模块!...bar.css' // good import fooSass from 'foo.scss' import barCss from 'bar.css' 迭代器 建议使用 JS 更高优先级函数代替...,我建议统一使用分号,代码更加清晰 关于应不应该使用分号讨论有很多,好 JS 程序员应该清楚场景下是一定要加分号,相信你也是名好开发者。

5.2K10

前端--理解 Promise 工作原理

从同步编程到异步回调编程有一个适应过程,但是如果出现多层回调嵌套,也就是我们常说厄运回调金字塔(Pyramid of Doom),绝对是一种糟糕编程体验。...于是便有了 CommonJS Promises/A 规范,用于解决回调金字塔问题。本文先介绍 Promises 相关规范,然后再通过解读一个迷你 Promises 以加深理解。...callback,改造成一系列.then连缀调用,去除了层层缩进糟糕代码风格。...Promises 不是一种解决具体问题算法,而已一种更好代码组织模式。接受新组织模式同时,也逐渐以全新视角来理解异步调用。...于是花了 些经理查阅并翻译了Promise 规范,以充分理解 Promise 细节。

1.4K60

前端必须理解this相关知识

一、对this产生原因分析和了解 1.this指的是函数运行时所在环境(即调用对象)。...2.JavaScript 语言之所以有this设计,跟内存里面的数据结构有关系 二、this绑定详解 this 实际上是在函数被调用时发生绑定,它指向什么地方完全取决于函数在哪里被调用。...(2)把这个新对象__proto__属性指向 原函数prototype属性。(即继承原函数原型) (3)将构造函数作用域赋给新对象(因此 this 就指向了这个新对象) (4)返回新对象。...绑定 (1)函数体内this对象,就是定义时所在对象,而不是使用时所在对象。...) // 箭头函数 setInterval(() => this.s1++, 1000); //箭头函数没有this,它this来自绑定时所在作用域 即外部代码块

20110

我所理解前端

当下业内前端字眼出现频率比较高,于是大致了解了一下微前端 主要内容包括:什么是微前端?微前端好处和意义是什么?做微前端应该如何做?...当发现使用微前端反而使效率变低,简单变更复杂那就说明微前端并不适用。 如何做微前端前端思想其实有点类似于 iframe,起一个框架,做一个导航,然后嵌入不同页面。...单纯根据对概念理解,实现微前端就是将应用进行拆解和整合,通常是一个父应用加上一些子应用,主应用管理各个子应用。...每当微应用JavaScript被加载并运行时,它核心实际上是对全局对象 Window 修改以及一些全局事件改变,例如jQuery这个js运行后,会在Window上挂载一个window....通常在Node.js端可以采用vm模块,而对于浏览器,则需要结合 with 关键字和 window.Proxy 对象来实现浏览器端沙箱。

54150

深入理解Jsthis

深入理解Jsthis JavaScript作用域为静态作用域static scope,但是在Jsthis却是一个例外,this指向问题就类似于动态作用域,其并不关心函数和作用域是如何声明以及在何处声明...作用域 我们先来了解一下JavaScript作用域,以便理解为什么说this更类似于动态作用域,通常来说,一段程序代码中所用到名字并不总是有效或可用,而限定这个名字可用性代码范围就是这个名字作用域...JavaScript在栈内存中提供一个供Js代码执行环境,关于作用域以及函数调用都是栈内存中执行。...Js中基本数据类型String、Number、Boolean、Null、Undefined、Symbol,占用空间小且大小固定,值直接保存在栈内存中,是按值访问,对于Object引用类型,其指针放置于栈内存中...这个函数也是存在于堆内存中,实际上在此处我们可以将其理解为这个函数实际定义在一个内存区域(以一个匿名函数形式存在),而obj这个对象同样在其他一个内存区域,obj通过say这个属性指向了这个匿名函数内存地址

39410

理解JS“异常传播”

今天看了廖雪峰老师一篇文章关于处理异常,写很不错,总结一下!...我们都知道JS里面的函数是非常重要一部分,也是学习JS精髓所在,那函数分为很多种,看你怎么分,可以分为有参函数和无参函数,按照返回值分为有返回值函数和没有返回值函数,那么在写函数时候我们经常遇到一个问题就是异常处理...,之前在写Java时候其实也是一样会遇到这样问题,那么在java里面其实只要你觉得哪里可能会出问题时候,你只需要将代码try-catch捕捉一下将异常处理就行了,在js里面呢其实也是一样,例如下面的例子...length' of null 这句话也就是我们处理异常时候写,也是最常见一种,这个函数叫做有参函数, 那么我们捕捉是参数会不会有问题,如果有问题我们就将异常捕捉出来,这是很常规一种写法,今天我们要说是异常传播是什么意思呢...其实我们在写js函数时候很多时候不会是一个函数,会有很多函数接连调用,那么任何一个函数出问题其实都是应该捕捉,理论上是这样是吧,但是这样写代码的话就很麻烦了,所以就出现了下面这样代码:

70010

js---BOM 理解方法

, "Default"); //提示用户输入信息,接受两个参数,即要显示给用户文本和文本框中默认值,将文本框中值作为函数值返回 window.status //可以使状态栏文本暂时改变 window.defaultStatus...//默认状态栏信息,可在用户离开当前页面前一直改变文本 window.setTimeout("alert('xxx')", 1000); //设置在指定毫秒数后执行指定代码,接受2个参数,要执行代码和等待毫秒数...window.clearTimeout("ID"); //取消还未执行暂停,将暂停ID传递给它 window.setInterval(function, 1000); //无限次地每隔指定时间段重复一次指定代码...pictures/index.htm location.portocol //URL中使用协议,即双斜杠之前部分,如http location.host //服务器名字,如www.wrox.com...//URL中主机名后部分,如/pictures/index.htm location.search //执行GET请求URL中问号后部分,又称查询字符串,如?

1.4K30

js事件委托理解

事件委托也叫事件代理,事件委托就是利用事件冒泡,指定一个事件处理程序,就可以管理某一类型所有事件,何为事件冒泡呢,就是从事件最深节点开始,然后逐步向上传播事件,最大优点是提高性能 一般做法 <ul...break; } } } } 所写事件对应新增加元素是不起作用...值得注意是,mouseover和mouseout虽然也有事件冒泡,但是处理它们时候需要特别的注意,因为需要经常计算它们位置,处理起来不太容易。...不适合就有很多了,focus,blur之类,本身就没用冒泡特性,自然就不能用事件委托了。...我理解是:事件委托都是在外围div添加事件,当点击内部一个元素时,即使这个元素没有onclick事件,依然会从内到外执行onclick事件,js中外部div 添加事件函数内 var ev = ev

98920
领券