
javascript
文章平均质量分 60
茂树茂树
这个作者很懒,什么都没留下…
展开
-
深入理解函数内部原理(6)——函数的内部方法call、apply、bind
call和apply这两个方法都是打破了解析器在函数调用时创建执行环境时赋值this绑定的时候的内部规则,直接通过Function内置标准类型的prototype属性中的两个方法call和apply进行明确的声明this的值。 但是这里的call是自定义的用户可以使用的可以编程的,还有任何一个函数都有内置属性[[Call]],这两者不同。后者内部原理性的调用,创建执行环境的。 具体表述下call原创 2017-03-08 21:22:31 · 3252 阅读 · 0 评论 -
面向对象的javascript系列文章(1)接口——是一个标准委员会
在面向对象开发中,接口确实是一个特别抽象的名词,加上一些语法的赘述,“醉了~”有木有。一般在java中对于接口的定义会是这样的:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。(来源于百度百科别打我,但是人家说的有错?)这个定义完全就是在说怎么去创建使用一个接口,接...原创 2017-03-25 20:30:38 · 1169 阅读 · 0 评论 -
面向对象的javascript系列文章(2)封装——信息隐藏
封装是为了实现在分析层面分离关注点的行为,目的是为了达到信息隐藏。 一、封装是分离关注点的一种实现方式 对于一个复杂的系统来说,经过抽象之后,可以清楚的看到一个层次结构。对于每一层的抽象,都是由多个模块组成的,这些模块之间互相通信以便于为了上一层的抽象提供服务。一般来说,我们对于研究的每一层抽象,都是先在这个问题空间中找到与某个模块相关的所有特性...原创 2017-03-26 22:00:12 · 720 阅读 · 0 评论 -
面向对象的javascript系列文章(3)继承——代码重用
javascript中如何实现继承 1.1类式继承<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>类式继承</title></head>原创 2017-03-27 15:07:01 · 388 阅读 · 0 评论 -
深入理解js面向对象——创建对象
本博客原文在这 由于js这门语言是解析型语言的特性,导致js中的对象更加灵活,更像是一些 属性的集合,或者说类似于散列表或者字典这些数据结构.所以我们可以在使用的时候随着需求对对象中的属性进行增删改查,这完全是动态的不是编译好的.那么 js中的对象是怎么表示的? js对象的内部表示原理是什么? js创建对象有几种方式? 他们的内部执行过程是什么? 通过这篇文章,可以一探究竟.思维导图如下: #原创 2017-07-04 15:50:11 · 4924 阅读 · 0 评论 -
优化加载和执行提高javascript性能
一、在HTML中使用javascript 1、<.script><./script> <script type="text/javascript">/*必须只有type属性,可能还有defer*/ function sayHi(){ alert('Hi!'); };</script&原创 2016-07-23 14:44:25 · 1637 阅读 · 0 评论 -
DOM(一)一些属性方法介绍以及兼容性问题
一、nodeType:以数字值返回指定节点的节点类型。 存在 12 种不同的节点类型,其中可能会有不同节点类型的子节点: 二、childNodes:只读属性,表示某个元素子节点的集合,返回NodeList 对象。 在标准浏览器下:返回的子节点中包含文本类型、元素类型、注释类型等,特别的包含文本类型中空文本即所谓的换行。 在非标准的浏览器子节点中不包含文本类型中空文本,同时与节点原创 2016-07-20 12:25:02 · 5792 阅读 · 1 评论 -
数组去重的几种方式
<script type="text/javascript">var arr = [1,2,3,-45,678,345,4,5,5, 3,2,-45,1,0,678,543,55]; function sortFun(a,b){ return a-b; }/*方法一:先排序,后去重复杂度为 nlogn 占用内存,速度慢*/ functi原创 2016-08-02 17:08:51 · 515 阅读 · 0 评论 -
getElementsByClassName与classList兼容性问题与解决方案
<script type="text/javascript"> function arrIndexOf(classArr,className){ for(var i = 0; i<classArr.length; i++){ if(classArr[i] === className){原创 2016-08-05 18:50:16 · 3575 阅读 · 0 评论 -
DOM(三)event事件
交代一个例子<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>事件</title> <style type="text/css"> div {padding:40px;} #div1{background: red原创 2016-08-07 22:59:23 · 1934 阅读 · 4 评论 -
使用var、let、const声明变量
一、使用var声明变量1、使用方法通过var关键字可以一次声明一个变量或者多个变量,同时可以为声明的变量赋初始值。但是变量的声明和初始值并不是在同一时间执行的,在执行初始值之前这些声明的变量的值为undefined。'use strict';var x = 12, y = x;2、声明变量与非声明变量区别变量声明定义的时候无论出现在代码的什么位置,都会在执行代码之前,将声明的变量添加到当前原创 2017-04-05 21:56:44 · 2015 阅读 · 0 评论 -
创建对象的几种方式
在javascript中,所有对象的创建都是基于原型的。在js中任意的对象都有一个内部属性[[Prototype]]。这个属性的值只能是object或者是null。对象有这个内部属性的目的就是为了实现继承,或者更明确的说实现属性(方法)的复用。所以说创建一个对象的关键就是确定[[prototype]]的值。一般情况下,如果创建了一个对象什么属性也没有那么这个对象的原型就是Object.protot原创 2017-04-11 18:25:20 · 4994 阅读 · 0 评论 -
深入理解函数内部原理(4)——通过new操作符调用构造函数
以new Experssion(args) 过程一:先确定是否是一个构造函数 先解析Experssion比姑且通过getValue方式取得该值F,通过判断这个值F是否是一个对象,并且这个对象F是否具有Construct内部方法,如果是的话证明是一个函数,否则抛出一个TypeError异常。过程二:调用函数内部方法[Construct] 这个方法中分为如下几个过程: (1)创建一个空的对象ob原创 2017-03-08 11:05:22 · 1082 阅读 · 0 评论 -
深入理解函数内部原理(3)——动态的this
在阅读本博客之前先阅读: 深入理解函数之函数定义、调用、解析、执行 解剖http://blog.youkuaiyun.com/wmaoshu/article/details/60469571 深入理解函数之对一个函数实例进行深入的分析本博客主要是深入讨论下js中this相关的东西。JS中this是什么正如在前面博客 执行环境 http://blog.youkuaiyun.com/wmaoshu/article/detai原创 2017-03-07 11:48:12 · 618 阅读 · 1 评论 -
javascript代码为什么运行这么慢?
Js之所以比起c++慢,是因为js是一个解析型无类型的语言,而c++等是编译型的静态类型的语言。编译型的语言是在编译的时候就确定了每一个变量的位置、类型、偏移量。但是js语言是一边执行一边确定变量的位置和类型的,大家也都知道,程序的执行本质上就是对一些数据的操作,这会带来严重的性能损失。下面像是所以下这两种语言在处理代码的时候的过程,从中可以发现不同之处。 c++代码执行class class1原创 2017-02-21 19:14:10 · 2282 阅读 · 0 评论 -
为什么javascript会有两个表示“没有”的类型呢?
Js中有两个表示“没有”这一概念的基本类型分别是null和undefined,那么他们有什么区别呢?一、历史原因:null是对象,自动转化成0. undefined是原始值,自动转化成NaN。在js语言初期阶段,js是效仿的java语言,在java中null也是一个对象,只不过这个对象表示的是空对象,换句话说,如果一个变量赋值为null,那么这个变量的指针不指向任何对象。这也说明为什么在js中用t原创 2017-02-21 14:25:03 · 909 阅读 · 0 评论 -
执行环境
执行环境:执行环境是一个内置规范类型的对象(这种对象不能被程序所使用,仅仅是为了维护执行程序所产生的),这个对象与源代码文本中每一个可执行代码区域相关联(比如全局代码、函数代码、eval代码)。程序每当解析器开始进入一个可执行代码区域执行的时候,解析器就会创建一个和这个可执行代码区域相关的执行环境,并且将这个执行环境push到一个逻辑栈中。当把这个可执行代码区域的程序执行完毕之后,这个执行环境会从逻原创 2017-03-05 14:29:50 · 1128 阅读 · 0 评论 -
深入理解函数内部原理(1)——函数定义、调用、解析、执行
在阅读本博客之前先阅读: 执行环境: http://blog.youkuaiyun.com/wmaoshu/article/details/60466990 引用规范类型:http://yanhaijing.com/es5/#80 本系列博客主要说一下一个函数从定义到调用到解析到执行的过程,以便于更好的理解后续介绍的闭包、this等概念。先介绍内部原理,然后通过一个实例说明一下这个原理。然后是一些对这个原原创 2017-03-05 17:38:37 · 3829 阅读 · 1 评论 -
深入理解函数内部原理(2)——对一个函数实例进行深入的分析
在阅读本博客之前先阅读: 深入理解函数之函数定义、调用、解析、执行 解剖http://blog.youkuaiyun.com/wmaoshu/article/details/60469571 本博客是使用一个例子来对这个博客的进行说明例子如下:<script>"use strict";var scope = "global scope";var o = {"checkscope":(functio原创 2017-03-07 15:40:00 · 1713 阅读 · 0 评论 -
深入理解函数内部原理(5)——闭包
什么是闭包其实通过前面几篇博客系统的介绍了函数的定义调用执行过程之后,带现在应该可以隐隐约约的感觉的闭包的存在了。 什么是闭包呢?我的理解就是 函数定义的时候的作用域链在函数调用的时候依然有效,这就是闭包。 那么js内部是怎么实现的呢?还记得函数对象有一个内部属性是[Scope]吗?挡在函数创建的时候,这个内部属性背赋一个值,这个值就是函数所在的执行环境的此法环境也就是说外部的作用域,对于具名的原创 2017-03-08 15:02:49 · 786 阅读 · 0 评论 -
[] == false,和!![] == false结果为什么不一样?探究 == 本质
console.log([] == false, !![] == false);// true falseconsole.log([] === false, !![] === false);// false falseconsole.log([] == []);// falsevar a = [];console.log(a == !!a);//fasle先解析[] == f原创 2017-04-08 16:38:29 · 10642 阅读 · 0 评论 -
javascript中关于浮点数不精确问题解决方案
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>精确度</title></head><body><script>var FloatOper = (function(){ // 表达式处理函数 var FloatOper = function(s){原创 2017-03-22 11:01:47 · 556 阅读 · 0 评论