构造函数的首字母必须大写,用来区分于普通函数; 这里的this指向实例化后的对象p;function P(name) { this.name=name; this.say=function(){ console.log...通常普通对象是通过Object创建的。...p.proto ==> P.prototype ==> P.prototype.proto ==> Object.prototype ==> Object.prototype.proto ==>null JS...2、每个对象都有一个名为_proto_的内部属性,指向它所对应的构造函数的原型对象,原型链基于_proto_; 好了,开始上代码和例子,建一个普通对象,我们可以看到 1、p的确没有prototype属性...2、p是P的实例 3、p的__proto__指向P的prototype 4、Object.prototype.constructor指向Object本身P.prototype.job=function
(注2:更多内容请查看我的目录。) 1. JS的数据类型 JS变量的数据类型的值有两种:基本类型值和引用类型值。基本类型值指简单的数据段,而引用类型值指那些可能由多个值构成的对象。...JS的变量复制 JS对基本类型的复制和引用类型的复制并不相同。基本类型值的复制实际上将变量和其存储的内容重新复制了一份,而引用类型的复制只是将其保存的指针复制了一份,实际存储对象的堆并没有复制。...JS的参数传递是按值传参 JS的参数是按值传递,即将函数外部的值复制给函数内部的参数,其复制过程如前所述。那么对内部变量值的改变是否会影响外部变量呢,这里我们用具体的例子来分析一下。...现在,我们明白了,其实JS函数参数的传递始终是按值传递。但是在函数调用的过程中,我们到底是对该值指向的堆地址进行了操作,还是对该值进行了操作,决定了我们是否会对原变量产生影响。 4....测试一下 看到这里,你应该已经掌握了JS的数据类型和按值传递。来做一个小测验,下面是两个对数组进行拼接并返回拼接后数组的函数,哪个函数在拼接的同时对传入的参数也产生了影响呢?
JS可以做的事多了,那就用来实现一个计算器吧 看看手机中的计算器,分为普通计算器和科学计算器 ? ?...,这篇博文 说得比较清楚了 所以,在这个计算器的实现中,采用了后缀表达式的实现方式,参考以上文章,重点关注这两个算法: 与转换为前缀表达式相似,遵循以下步骤: (1) 初始化两个栈:运算符栈S1和储存中间结果的栈...二、实现过程 第一步当然是搭建计算器的页面结构,不是科学计算器,只提供了基本的运算功能,但也能即时地进行运算,显示出完整的中缀表达式,运算后保存上一条运算记录。...JS逻辑 这部分就是重点了,一步步来说 首先是对计算器的监听吧,也就是这个表格,可以使用事件委托的方式,在父级节点上监听处理 // 绑定事件 bindEvent: function...,中缀、后缀只是一个难点,更复杂的地方是整个计算器的状态变化(或者说是数据变化) 在这个简单的计算器中,就有数字(0-9)、运算符(+ - * /)、操作(清除 删除)、预运算(百分号 平方)、小数点、
html部分: 汇率计算器 选择货币单位获取汇率</p...: 0; } @media (max-width: 600px) { .currency input { width: 200px; } } css逻辑: 第一步:先清除掉系统默认的元素的...与.rate的部分.中间的全都是空格的。...消除border默认的颜色样式. 效果; ?...js部分: // 获取节点 const currencyEl_one = document.getElementById("currency-one"); const amountEl_one
不完善,接下来想着把运算符分开成一个一个的按钮... 自制计算器 <style type="text/css"
点击即可进入计算器页面 点击即可进入计算器页面 代码 代码: 计算器
charset="UTF-8"> 简单计算器...document.getElementById('texton').value; } } 简单计算器
js中的类型名的强制类型转换 Number(mix)、 String(mix)、 Boolean(mix) js中的类型隐式转换的条件是什么?...各种运算符,包括==比较运算符,还有++,大于小于等等 js中强制类型转换的两种方式是什么?...对象转原始类型,会调用内置的[ToPrimitive]函数,对于该函数而言,其逻辑如下: 如果有Symbol.toPrimitive()方法,优先调用再返回 调用valueOf(),如果转换为原始类型,...结果为 true console.log({a: 1} == true); // false console.log({a: 1} == "[object Object]"); // true 所以重要的在于养成和保持一个活泼无碍的心灵境地...,利用天赋的身与心的能力,自觉地尽量发展生活的可能性。
首先我们思考一下JS中为什么会有this。...其实这里对this的两处解读都是错误的。首先,this.bar()能够运行完全是一种偶然,怎样的偶然呢?...3.3 this的真正解读 this 是在运行时进行绑定的,并不是在编写时绑定,它的上下文取决于函数调 用时的各种条件。this 的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。 4....当一个函数并非一个对象的属性时,那么它就是被当做一个函数来调用的。对于普通的函数调用来说,函数的返回值就是调用表达式的值。...当然我们也可以让this指向任何事先设定的对象,做到一种强制的绑定,也就是所谓的硬绑定。
github地址:https://github.com/confidence68/houseCal
(本篇着重现象,原理详见 JS入门难点解析5-变量对象) 1. JavaScript是否需要编译 这节内容并不会对此做深层次的探讨,而是普及一个知识。...很多同学看到这一段,就想当然的认为JS就是一行行往下执行的语言,只要对着源码往下一路走即可。...难道JS不是一行行顺序执行的吗?...所以,我的理解是,之所以说JS不需要编译,只是它不像其他编译语言一样需要翻译成等价的另一种语言。但是仍然需要进行语法分析和代码生成,并且通常是立即执行。...而本篇文章所要讨论的内容——JS的变量提升和函数提升就发生在编译阶段。(随着自己进一步了解执行上下文,觉得这里所指的编译器的作用有点类似于执行上下文生命周期的第一阶段)。 2.
执行上下文(执行环境) 在前篇JS入门难点解析4-执行上下文栈中讲到,当 JavaScript 代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context...变量对象 变量对象是与执行上下文相关的数据作用域,存储了在执行上下文中定义的变量和函数声明。 不同执行上下文下的变量对象稍有不同,我们主要看一下全局上下文下的变量对象和函数上下文下的变量对象。...再来看W3CSchool中对全局对象的描述: 全局对象是预定义的对象,作为 JavaScript 的全局函数和全局属性的占位符。通过使用全局对象,可以访问所有其他所有预定义的对象、函数和属性。...作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,始终都是当前执行的代码所在环境的变量对象。...(详见JS入门难点解析3-作用域)。
女性最佳身材计算器根据你输入的身高,即能得出最佳身材,根据东方女性的特征而定! 女性最佳身材计算器可以根据你输入的身高来计算上臂围,胸围,腰围下限,腰围上限,臀围,大腿围,小腿围。...女性身材比例公式来计算女性的最佳身材,完美身材,魔鬼身材。...document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); 女性最佳身材计算器仅供参考...目前网上能查到的理想身材的比例标准较多,这个女性最佳身材计算器根据黄金分割比来计算,具有普遍和代表性。打造完美身材,魔鬼身材,欢迎参考对照。...https://www.zxgj.cn/g/shencai 女性魔鬼身材计算公式 每一个女性都渴望有一副完满的身材,但什么样的身材才完美呢?你知道标准的三围是什么样的吗?
(注2:更多内容请查看我的目录。) 1. 简介 在本系列的前一篇文章JS入门难点解析2-JS的变量提升和函数提升中,我们已经讨论过。...之所以不说JS需要编译,只是它不像其他编译语言一样需要翻译成等价的另一种语言。但是仍然需要进行语法分析和代码生成,并且通常是立即执行。而且,JS的变量提升和函数提升就发生在编译阶段。...作用域 引擎的另一位好朋友,负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限。...但是如果对变量的查询如果是以查找不到的结果终止时,LHS和RHS的表现是不同的。 如果 RHS 查询在所有嵌套的作用域中遍寻不到所需的变量,引擎就会抛出 ReferenceError 异常。...参考 JavaScript深入之词法作用域和动态作用域 JS入门难点解析2-JS的变量提升和函数提升 BOOK-《JavaScript高级程序设计(第3版)》 BOOK-《你不知道的JavaScript
(注2:更多内容请查看我的目录。) 1. 简介 学习JS,对象是一个绕不开的话题。本章将由浅入深探讨对象的创建方法。 2. 创建单个对象的三种简单办法 简单的对象创建方法,主要用于创建单个的对象。...,是开发人员最青睐的创建对象的方法。...同样,你也可以通过创建自定义的构造函数,来定义自定义对象类型的属性和方法。创建自定义的构造函数意味着可以将它的实例标识为一种特定的类型,而这正是构造函数模式胜过工厂模式的地方。...将构造函数的作用域赋给新对象(因此this就指向了这个新对象)(参考JS入门难点解析7-this)。 执行函数中的代码(为这个新对象添加属性)。 返回新对象。 那么构造函数模式的缺点是什么呢?...这种模式有点类似于你借别人的工厂生产的产品,无法贴上他们品牌的标识。你借用的是工厂,但不是品牌。
(注2:更多内容请查看我的目录。) 1. 简介 闭包,是让很多JS初学者闻之色变的一个概念。每次看过一些书籍或者网上的例子,会感觉自己懂了很多,但又是似懂非懂。...这篇文章,我们会结合前面所学,深入探讨一下闭包的原理,让大家从根本上弄明白闭包产生的原因。 2. 定义 关于闭包的定义,是让大家迷惑的第一个点。因为不同书籍,不同的大神对闭包的解读和定义不尽相同。...定义一 我们先来看一下《JavaScript高级程序设计》一书中对闭包的的定义: 闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数。...都是因为bar中保留有对foo的执行环境的活动对象的引用。具体的分析过程,大家可以自己尝试一下。 4....总结 通过这篇文章的分析,我们可以清晰的看到闭包形成的原理,也可以看出闭包为什么可能造成内存被大量占用的原因。
简介 在JS入门难点解析5-变量对象中提到,对于每个执行上下文,都有三个重要属性: 变量对象(Variable object,VO) 作用域链(Scope chain) this 这篇文章主要讲解作用域链...作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,始终都是当前执行的代码所在环境的变量对象。...[scope]]的VO中的a })(); 这个例子也清晰的表明,一个函数(这个例子中为从函数“foo”返回的匿名函数)的[[scope]]持续存在,即使是在函数创建的作用域已经完成之后。...= [ globalContext ]; 参考 JavaScript深入之作用域链 前端基础进阶(四):详细图解作用域链与闭包 JS入门难点解析5-变量对象 javascript中的[[...js 中的活动对象 与 变量对象 什么区别? BOOK-《JavaScript高级程序设计(第3版)》
简介 在前面两节,我们花了大量的篇幅来介绍如何创建对象(JS入门难点解析10-创建对象)以及构造函数,原型对象和实例对象三者的定义和关系(JS入门难点解析11-构造函数,原型对象,实例对象)。...我们知道,JavaScript是一种基于对象的脚本语言,而在ES6之前JS没有类的概念。如何将所有的对象区分与联系起来?如何更好地组织JS的代码呢?...下面我们详细介绍实现JS继承的两类四种方式和这几种方式的组合,以及他们各自的优缺点。 3. 模拟类的继承 正如第2节所述,JS的设计者为我们提供了一个最直接的思路。...参考 JS入门难点解析10-创建对象 JS入门难点解析11-构造函数,原型对象,实例对象 javascript面向对象系列第三篇——实现继承的3种形式 一张图理解prototype、proto和constructor...的三角关系 JS实现继承的几种方式 重新理解JS的6种继承方式 Javascript继承机制的设计思想 经典面试题:js继承方式上 经典面试题:js继承方式下 闲说继承 Javascript
(注2:更多内容请查看我的目录。) 1. 简介 在本系列的第二篇文章JS入门难点解析2-JS的变量提升和函数提升中,我们已经讨论过。...之所以不说JS需要编译,只是它不像其他编译语言一样需要翻译成等价的另一种语言。但是仍然需要进行语法分析和代码生成,并且通常是立即执行。而且,JS的变量提升和函数提升就发生在编译阶段。...当JS引擎遇到这三类代码时,会开始做准备工作,创建一个“执行上下文(execution context)"。...举例说明,当JS执行到一个函数的时候,就会创建该函数的“执行上下文(execution context)"。那么问题来了,JS代码中可能出现为数众多的函数,如何管理创建的那么多执行上下文呢? 3....fun1执行完毕 ECStack.pop(); // javascript接着执行下面的代码,但是ECStack底层永远有个globalContext 参考 JavaScript深入之执行上下文栈 JS
sdk内部提供的数据结构,底层都或多或少的离不开数据的使用。...比较官方的定义是:它使用一块连续的存储空间来存储相同类型的数据,它是一个线性的数据结构。 关键点有三 连续的存储空间 相同的类型 线性数据结构 连续的存储空间,它这个限制是什么意思呢?...那么这一特性具体是如何而来的呢? 假设我们有一个数组a,它存储的类型为int,数组大小为5。 那么它在内存中的表现大概会是这样的。 ? 所以数组中的元素存储在内存中都是在一块连续的地址中。...简单的理解就是,如果我们需要在第k个位置上插入数据,并不需要移动后续的数据,因为不需要保证数据的顺序,我们只需将第k个位置的数据替换成插入的数据,然后再将第k个位置的原有数据添加到数组的最末尾。...每当我们进行删除数据的时候,并不立即删除当前位置的数据,而是对当前位置进行标记,等到标记的数量达到一定的程度之后,我们再对标记的数据进行统一的删除操作。这样就减少在删除操作过程中移动数据的次数。
领取专属 10元无门槛券
手把手带您无忧上云