深入浅出 JavaScript 关键词 -- this】的更多相关文章

深入浅出 JavaScript 关键词 -- this 要说 JavaScript 这门语言最容易让人困惑的知识点,this 关键词肯定算一个.JavaScript 语言面世多年,一直在进化完善,现在在服务器上还可以通过 node.js 来跑 JavaScript.显然,这门语言还会活很久. 所以说,我一直相信,如果你是一个 JavaScript 开发者或者说 Web 开发者,学好 JavaScript 的运作原理以及语言特点肯定对你以后大有好处. 开始之前 在开始正文之前,我强烈推荐你先掌握好…
JavaScript 没有类的概念,因此它的对象与基于类的语言中的对象有所不同.笔者主要参考<JS 高级程序设计>.<JS 权威指南>和<JS 精粹> 本文由浅入深的讲解了对象的概念,特性,和使用,由于笔者水平的确有限,有些观点也是边理解,边查证,边分享. 希望大家都能感受到分享的乐趣,祝我们共同进步,请大家不吝交流. 目录 对象是什么? 对象有什么特性? 对象有什么用? 如何创建对象? 对象直接量 工厂方法创建对象 通过 new 创建对象 对象属性的查询与设置(检索与…
深入浅出的javascript的正则表达式学习教程 阅读目录 了解正则表达式的方法 了解正则中的普通字符 了解正则中的方括号[]的含义 理解javascript中的元字符 RegExp特殊字符中的需要转义字符 了解量词 贪婪模式与非贪婪模式讲解 理解正则表达式匹配原理 理解正则表达式----环视 理解正则表达式---捕获组 理解非捕获性分组 反向引用详细讲解 正则表达式实战 回到顶部 了解正则表达式的方法 RegExp对象表示正则表达式,它是对字符串执行模式匹配的工具: 正则表达式的基本语法如下…
Javascript语言的继承机制,它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instance)的区分,全靠一种很奇特的"原型链"(prototype chain)模式,来实现继承. 这部分知识也是JavaScript里的核心重点之一,同时也是一个难点.我把学习笔记整理了一下,方便大家学习,同时自己也加深印象.这部分代码的细节很多,需要反复推敲.那我们就开始吧. 小试身手 原型链…
闭包(closure)是掌握Javascript从人门到深入一个非常重要的门槛,它是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.下面写下我的学习笔记~ 闭包-无处不在 在前端编程中,使用闭包是非常常见的,我们经常有意无意,直接或间接用到了闭包.闭包可以使传递数据更加灵活(比如处理一些点击事件) !function() { var localData = "localData here"; document.addEventListener('clic…
JavaScript中的this比较灵活,根据在不同环境下,或者同一个函数在不同方式调用下,this都有可能是不同的.但是有一个总的原则,那就是this指的是,调用函数的那个对象. 下面是我的学习笔记,把它罗列成8种情况. 全局的this(浏览器) 全局作用域的this一般指向全局对象,在浏览器中这对象就是window,在node中这对象就是global. console.log(this.document === document); // true (document === window.…
JavaScript中的this比较灵活,根据在不同环境下,或者同一个函数在不同方式调用下,this都有可能是不同的.但是有一个总的原则,那就是this指的是,调用函数的那个对象. 下面是我的学习笔记,把它罗列成8种情况. 全局的this(浏览器) 全局作用域的this一般指向全局对象,在浏览器中这对象就是window,在node中这对象就是global. 1 2 3 4 console.log(this.document === document); // true (document ===…
闭包(closure)是掌握Javascript从人门到深入一个非常重要的门槛,它是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.下面写下我的学习笔记~ 闭包-无处不在 在前端编程中,使用闭包是非常常见的,我们经常有意无意,直接或间接用到了闭包.闭包可以使传递数据更加灵活(比如处理一些点击事件) 1 2 3 4 5 6 7 !function() {        var localData = "localData here";         do…
在 Java 等面向对象的语言中,this 关键字的含义是明确且具体的,即指代当前对象.一般在编译期确定下来,或称为编译期绑定.而在 JavaScript 中,this 是动态绑定,或称为运行期绑定的,这就导致 JavaScript 中的 this 关键字有能力具备多重含义,带来灵活性的同时,也为初学者带来不少困惑.本文仅就这一问题展开讨论,阅罢本文,读者若能正确回答 JavaScript 中的 What ’s this 问题,作为作者,我就会觉得花费这么多功夫,撰写这样一篇文章是值得的. Ja…
Java 等面向对象的语言中,this 关键字的含义是明确且具体的,即指代当前对象.一般在编译期确定下来,或称为编译期绑定.而在 JavaScript 中,this 是动态绑定,或称为运行期绑定的,这就导致 JavaScript 中的 this 关键字有能力具备多重含义,带来灵活性的同时,也为初学者带来不少困惑.本文仅就这一问题展开讨论,阅罢本文,读者若能正确回答 JavaScript 中的 What ’s this 问题,作为作者,我就会觉得花费这么多功夫,撰写这样一篇文章是值得的. Java…
有一段时间不更新博客了,今天分享给大家的是一篇关于JS数组的,数组其实比较简单,但是用法非常灵活,在工作学习中应该多学,多用,这样才能领会数组的真谛. 以下知识主要参考<JS 精粹>和<JavaScript 高级程序设计>. 数组是一段线性分配的内存,它通过整数计算偏移并访问其中的元素.JavaScript 没有像此类数组一样的数据结构. 它提供了一些类数组特性的对象,它把数组的下标转变为字符串,用其作为属性. ECMAScript和其他语言中的数组的区别: ECMAScript…
本文主要从原理入手分享变量和作用域的相关知识,最后结合本文所分享知识,再次深入了解下闭包的运行原理. 主要参考<JS高级程序设计> <JS权威指南> <高性能 JS> 三本书. 目录 1 变量 1.1 变量的声明 1.2 变量类型的特点 2 执行环境和作用域 3 再谈谈闭包 变量 对 JavaScript 稍微有点了解的同学都知道,JavaScript 中的变量与其他语言的变量有很大区别. JS 的弱类型的特性决定了变量只是在特定时间(生命周期,作用域中)用于保存特定值…
本文的观点是建立在<JavaScript权威指南 6th Ed> <JavaScript高级编程 3th Ed> <JavaScript精粹 2th Ed>之上, 笔者将尽所能将概念.原理叙述清楚,由于笔者水平有限,理解不当之处在所难免,请读者不吝交流. 目录 1 什么是函数? 2 函数就是对象! 3 函数字面量(函数表达式) 4 函数调用 4.1 方法调用模式 4.2 函数调用模式 4.3 构造器调用模式 4.4 间接调用模式 5 函数的参数与返回值 6 扩充类型的功…
由于Javascript是一门弱类型的语言,在我们的代码中无时无刻不在发生着类型转换,所以了解Javascript中的类型转换对于了解我们认识Javascript的运行原理至关重要. 本文主要从数值转换这一维度来剖析在JS中,数值转换会遵循什么样的规则,有哪些用途? 哪些情况下我们会用到js中的数值转换? 在传统的js中,对元素进行变换.位移.改变大小时,我们经常需要对长度单位进行计算操作: 当我们提供了一个通用add函数,此时需要对传入参数的类型进行限制,不能是非数字格式: 更多场景请关注知乎…
数据类型 1. 六种数据类型 JavaScript包含六种数据类型:基本类型number.string.boolean.null.undefined和对象类型Object.其中,对象类型包含方法function.数组array和日期Date等. 2. 隐式转换 使用+时表示连接,使用-时表示数字运算,可以巧用在number和string之间转换: 类型相同比较相当于恒等===: 类型不同尝试类型转换再比较,我称作为向下转型: null == undefined number == string,…
_________此篇日志属于重要记录,长期更新__________ this,call,apply这三个是进阶JS的重要一步,需要详细的记录. ➢ this 一.作为对象的方法调用. 当函数作为对象的方法被调用时,this指向该对象. 首先,函数必须作为对象的方法.这句话很关键,因为函数的调用有很多种可能,在后面会展现.示例1-1: var o = { name: 'o', get: function () { return this.name; } } console.log(o.get()…
2.为什么一切皆对象? <Javascript权威指南>解释了这个问题,问题的起源在于,如果typeof(字符串)返回的是string,并非object,那么为什么字符串也是对象呢? 简单说,像这类简单数据类型,JS都有一个对应的包装类(wrapper),比如说: var a="helloworld"; 当调用字符串a的方法时,JS就会在内部创建一个String包装对象,这种对象引用完之后就会瞬间消失,而且不会改变原字符串的内容. 理解这个,我们就可以通守new显式的创建一…
这一篇是根据不同的书本知识归纳的内容,解答的问题是浏览器是如何工作的? 另外,还有一些长篇的内容,写的是浏览器内部如何架构的,这些内容非常复杂艰深,比现在所写的内容又低了一个层级,希望有时间能总结贴出来. 一.打开浏览器窗口,产生window对象. 打开网页,首先弹出一个窗口,也就是window对象.这个对象是浏览器自动创建出来的. 根据JS的知识,任何一个对象都有属性和方法,属性又可以分为各种样式,比如数值number,字符串string,甚至属性也是一个对象,这样层层嵌套.那么,如何知道这个…
全局函数 自定义函数 函数对象 函数的属性和方法 一.全局函数 全局函数不同于内置对象的方法(来源于网络),一共有7个,可以直接使用. escape( ).eval( ).isFinite( ).isNaN( ).parseFloat( ).parseInt( ).unescape( ),具体使用可以百度,略过. 二.自定义函数 这一块知识相对比较简单,故略过. 三.函数对象 函数是对象,仅仅多了一个()括号,可以被调用. 既然函数是对象,那么是它的类是谁呢?就是Javascript内部维护的函…
一.私有变量和公有变量 通过var修饰的是私有变量. 二.私有变量的访问方法 三.特权.公有和私有方法 一个例子: function f(name) { var name=name; //私有变量 this.show1=function() //①特权方法,通过this修饰 { alert(name); //可以访问私有变量: } var show2=function() //②私有方法,通过var修饰 { alert(name); //可以访问私有变量 } show2(); //调用私有方法…
一.函数对象的属性和方法 函数是一种数据类型,也是对象,这一点很明确.因此,函数对象也可以添加属性和方法,但是这里的属性和方法是静态的,之所以这样说,就是为了区别构造函数. 示例如下: ①创建一个空的函数对象circle function circle() //定义一个空函数circle(),也可以称为建立函数对象circle; { } ②为此函数对象添加属性和方法: function circle() //定义一个空函数circle(),也可以称为建立函数对象circle; { } circl…
一.引子 本文介绍JavaScript运行机制,这一部分比较抽象,我们先从一道面试题入手: console.log(1); setTimeout(function(){ console.log(3); },0); console.log(2); 请问最后的输出结果是什么? 这一题看似很简单,但如果你不了解JavaScript运行机制,很容易就答错了.题目的答案是依次输出1 2 3,如果你有疑惑,下文有详细解释. 二.理解JS的单线程的概念 JavaScript语言的一大特点就是单线程,也就是说,…
javascript 数据类型 5种简单数据类型:Number.String.Boolean.Undefined.Null 1种复杂数据类型:Object =    表示赋值: ==  表示比较,但是会做隐式类型转换.比如,"1 == true", 此时,1会从一个Number数 据类型转换到Boolean数据类型,进而再做比较: === 表示比较,数据类型不同则不相等,因而相对于“==”也更严格一些.3===“3”:会返回false:因为不会转换他们的数据类型数字和字符串当然就不相等…
什么是跨域 1.document.domain+iframe的设置 2.动态创建script 3.利用iframe和location.hash 4.window.name实现的跨域数据传输 5.使用HTML5 postMessage 6.利用flash 本文来自网络(http://f2e.me/200904/cross-scripting/,该网址已不能访问),仅作个人读书笔记之用,并稍作修改和补充. 什么是跨域 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.但在安全限制…
在学习JavaScript的变量作用域之前,我们应当明确几点: JavaScript的变量作用域是基于其特有的作用域链的. JavaScript没有块级作用域. 函数中声明的变量在整个函数中都有定义. 1.JavaScript的作用域链 首先看下下面这段代码: <script type="text/javascript"> var rain = 1; function rainman(){ var man = 2; function inner(){ var innerVa…
一.JS单线程.异步.同步概念 众所周知,JS是单线程(如果一个线程删DOM,一个线程增DOM,浏览器傻逼了-所以只能单着了),虽然有webworker酱紫的多线程出现,但也是在主线程的控制下.webworker仅仅能进行计算任务,不能操作DOM,所以本质上还是单线程. 单线程即任务是串行的,后一个任务需要等待前一个任务的执行,这就可能出现长时间的等待.但由于类似ajax网络请求.setTimeout时间延迟.DOM事件的用户交互等,这些任务并不消耗 CPU,是一种空等,资源浪费,因此出现了异步…
创建变量,使用关键字var; 创建常量,使用关键字const; 大驼峰用于对象,小驼峰用于变量和函数. 在试图相加数字时意外做了字符串相连,是种常见的JavaScript错误.如果想做数字相加,请确定先把字符串转换为数字了,再应用加法. parseInt():把字符串传给函数,函数就把字符串转换为整数. parseFloat():把字符串传给函数,函数就把字符串转换为(十进制)浮点数. 制作(单次)定时器的JavaScript内置函数被称为setTimeout(). 函数需要的两项信息,分别是时…
一.引子 闭包(closure)是 Javascript 语言的一个难点,面试时常被问及,也是它的特色,很多高级应用都要依靠闭包实现.本文尽可能用简单易懂的话,讲清楚闭包的概念.形成条件及其常见的面试题. 我们先来看一个例子: var n = 999; function f1() { console.log(n); } f1() // 999 上面代码中,函数f1可以读取全局变量n.但是,函数外部无法读取函数内部声明的变量. function f1() { var n = 999; } cons…
第一章JS入门 第二章数据和判定常用的转义序列\b 回退 \f换页 \n换行 \r回车 \t制表符 \'单引 \"双引 \\反斜乘除求余的优先级相同,从左向右执行string对象indexOf()查找并返回子字符串的起始索引位置,未找到则返回-1substring()使用子字符串的起始和结束的索引作为参数,从另一个字符串中截取一个字符串Date对象JS是从0开始计算月份getMinutes() getFullYear() getMonth() getDate()方法Math对象Math对象是内置…
弱类型的隐式转换: 32 + 32 // 64 "32" + 32 // "3232" "32" – 32 // 0 巧用+/-规则转换类型: num – 0 // 把变量转换成数字 num + '' // 把变量转换成字符串型 ==: "1.23" == 1.23 // true; 0 == false // true null == undefined // true; new Object() == new Object…