this 指向问题ES5】的更多相关文章

ES5中this的指针 按照this指针的优先级,列出下面常会遇到的四种情况,从上到下依次是优先级从高到低(后面会详细比较优先级). 函数是和new一起被调用的吗(new绑定)?如果是,this就是新构建的对象. var bar = new foo() 函数是用call或apply被调用(明确绑定),甚至是隐藏在bind 硬绑定 之中吗?如果是,this就是明确指定的对象. var bar = foo.call( obj2 ) 函数是用环境对象(也称为拥有者或容器对象)被调用的吗(隐含绑定)?如…
一.前言 this指向,apply,call,bind的区别是一个经典的面试问题,同时在项目中会经常使用到的原生的js方法.同时也是ES5中的众多坑的一个.ES6中可能会极大的避免了this产生的错误,有时候需要维护老的项目还是有必要了解一下this的指向和apply,call,bind三者的区别. 二.this的指向 在ES5中,其实this的指向,始终坚持一个原理:this永远指向最后一个调用它的那个对象. 首先我们看一个栗子1: var name = "windowsName";…
参考资料:>>> this的指向 在 ES5 中,其实 this 的指向,始终坚持一个原理: this 永远指向最后调用它的那个对象 下面我们来看一个最简单的例子:(例子均来自参考资料中的经典例子)例 1: var name = "windowsName"; function a() { var name = "Cherry"; console.log(this.name); // windowsName console.log("inn…
个人理解+google翻译.如有错误,请留言指正.原文来自MDN: this 简介 Javascript中一个函数的this关键字的行为相对其它语言有些不同.在严格模式和非严格模式间也有区别. 在大多数情况下,this的值由函数如何调用来决定.this值不能在函数执行过程中赋值设置,并且每次函数调用时this值可能也不相同.ES5通过添加bind方法设置函数的this值,无论函数如何被调用.(this值永久不变) 全局上下文中 全局执行环境中(函数外部),无论在与不在严格模式下this指向全局对…
this.apply.call.bind 这又是一个面试经典问题~/(ㄒoㄒ)/~~也是 ES5中众多坑中的一个,在 ES6 中可能会极大避免 this 产生的错误,但是为了一些老代码的维护,最好还是了解一下 this 的指向和 call.apply.bind 三者的区别. this 的指向 在 ES5 中,其实 this 的指向,始终坚持一个原理:this 永远指向最后调用它的那个对象.记住这句话,this 你已经了解一半了.   下面我们来看一个最简单的例子:例 1: var name =…
(1)函数的定义 ## 函数声明法 // function run():string{ // return 'run'; // } //错误写法,返回类型错误 // function run():string{ // return 123; // } 匿名函数 // var fun2=function():number{ // return 123; // } // alert(fun2()); /*调用方法*/ ts中定义方法传参 /* function getInfo(name:string…
为什么要学 ES6 的语法呢? 因为 Vue 语法有很多都是 ES6(ECMAScript 6),这里推荐 [阮一峰 ECMAScript 6 入门]: http://es6.ruanyifeng.com/ # // var 声明的是全局变量 <script type="text/javascript"> // 输出a,发现没有,会自动在前面 var a; 然后再进行操作 console.log(a) //有变量提升,undefined { var a = 3; } con…
首先要明白箭头函数的作用: 箭头函数除了让函数的书写变得很简洁,可读性很好外:最大的优点是解决了this执行环境所造成的一些问题.比如:解决了匿名函数this指向的问题(匿名函数的执行环境具有全局性),包括setTimeout和setInterval中使用this所造成的问题. 平时我们常见的window属性和方法有alter,document,parseInt,setTimeout,setInterval,localtion等等,这些在默认的情况下是省略了window前缀的.(window.a…
ES5中提供了三种改变函数中this指针指向的方法,分别如下 1.call() var obj = {username:"孙悟空"}; //没有任何修饰的调用函数,函数中的this指向全局对象,此处为window function foo(para1,para2){ console.log(this,para1,para2) } //利用call()改变foo函数中this的指向,让它指向obj foo.call(obj,"传递的第一个参数","传递的第二…
ES object 扩展 ES object 扩展1. <!DOCTYPE html> <html> <head> <link rel="shortcut icon" href="./assets/favicon.ico" /> <meta charset="UTF-8"> <meta name="viewport" content="width=de…
不多逼逼 直接上代码: var name = "window"; var obj = { name: 'obj', //普通函数 one: function(){ console.log(this.name) }, //箭头函数 two: ()=> { console.log(this.name) }, //普通函数中的箭头函数 three: function(){ (()=>{ console.log(this.name) })() }, //多层箭头函数 four: (…
const test ={ id:2, a:function(){ var a_this=this; setTimeout(function(){ console.log('a:',this,a_this) }) }, a1:()=>{ var a1_this=this; setTimeout(function(){ console.log('a1:',this,a1_this) }) }, a11:()=>{ var a11_this=this; setTimeout(()=>{ co…
为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf 和 lastIndexOf,本文将对这几个方法进行详细的讲解,并对每一个方法进行原型扩展,以兼容不支持ES5的浏览器. forEach(callback[,thisArg]) 在ES5之前,我们可以通过for和for in 两种方式来遍历数组,而ES5引入了一个新方法forEach,使数组遍历更加简…
ES5概述(ECMAScript262/5.1) 本文参考:ES5概述 ECMAScript 是基于对象的: 基本语言和宿主设施都由对象提供,ECMAScript 程序是一组可通信的对象.ECMAScript 对象是属性的集合,每个属性有零个或多个 特性,以及属性的使用方式.例如,当设置一个属性的Writable 特性为 false 时,任何试图更改此属性值的 ECMAScript 代码的都会执行失败. 属性是一个容器,它可以存放其他 对象.原始值.函数. 原始值是以下内置类型之一的成员:Und…
this一般指向的是当前被调用者,但也可以通过其它方式来改变它的指向,下面将介绍三种方式: 1.call用作继承时: function Parent(age){ this.name=['mike','jack','smith']; this.age=age; } function Child(age){ Parent.call(this,age);//把this指向Parent,同时还可以传递参数 } var test=new Child(21); console.log(test.age);…
最近在看es2015的一些语法,最实用的应该就是继承这个新特性了.比如下面的代码: $(function(){ class Father{ constructor(name, age){ this.name = name; this.age = age; } show(){ console.log(`我叫:${this.name}, 今年${this.age}岁`); } }; class Son extends Father{}; let son = new Son('金角大王', 200);…
一.前言-索引 ES5中新增的不少东西,了解之对我们写JavaScript会有不少帮助,比如数组这块,我们可能就不需要去有板有眼地for循环了. ES5中新增了写数组方法,如下: forEach (js v1.6) map (js v1.6) filter (js v1.6) some (js v1.6) every (js v1.6) indexOf (js v1.6) lastIndexOf (js v1.6) reduce (js v1.8) reduceRight (js v1.8) 浏…
概述 map() 方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组. 语法 array.map(callback[, thisArg]) 参数 callback 原数组中的元素经过该方法后返回一个新的元素. currentValue callback 的第一个参数,数组中当前被传递的元素. index callback 的第二个参数,数组中当前被传递的元素的索引. array callback 的第三个参数,调用 map 方法的数组. thisArg 执行 callback…
在ES5继承的实现非常有趣的,由于没有传统面向对象类的概念,Javascript利用原型链的特性来实现继承,这其中有很多的属性指向和需要注意的地方. 原型链的特点和实现已经在之前的一篇整理说过了,就是通过将子类构造函数的原型作为父类构造函数的实例,这样就连通了子类-子类原型-父类,原型链的特点就是逐层查找,从子类开始一直往上直到所有对象的原型Object.prototype,找到属性方法之后就会停止查找,所以下层的属性方法会覆盖上层. 一个基本的基于原型链的继承过程大概是这样的: //先来个父类…
原文:http://javascript.ruanyifeng.com/stdlib/object.html 目录 概述 Object对象的方法 Object() Object.keys(),Object.getOwnPropertyNames() Object.observe() 其他方法 Object实例对象的方法 Object.prototype.valueOf() Object.prototype.toString() toString()的应用:判断数据类型 对象的属性模型 属性的at…
一.前言 ES5中新增的一些处理数组(Array)的方法, 对于用JavaScript处理数据非常有用.我总结了一下,给这些方法分了类,大体如下: 2个索引方法:indexOf() 和 lastIndexOf(): 5个迭代方法:forEach().map().filter().some().every(): 2个归并方法:reduce().reduceRight(): 下面我们来具体看一看这些方法怎么用吧! 二.索引方法 索引方法包含indexOf()和lastIndexOf()两个方法,这两…
为了更方便的对JS中Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf 和 lastIndexOf,本文将对这几个方法进行详细的讲解,并对每一个方法进行原型扩展,以兼容不支持ES5的浏览器. forEach(callback[,thisArg]) 在ES5之前,我们可以通过for和for in 两种方式来遍历数组,而ES5引入了一个新方法forEach,使数组遍历…
一.前言-索引 ES5中新增的不少东西,了解之对我们写JavaScript会有不少帮助,比如数组这块,我们可能就不需要去有板有眼地for循环了. ES5中新增了写数组方法,如forEach (js v1.6), map (js v1.6) ,filter (js v1.6),some (js v1.6),every (js v1.6),indexOf (js v1.6),lastIndexOf (js v1.6),reduce (js v1.8),reduceRight (js v1.8) 浏览…
使用js中的定时器(setInterval,setTimeout),很容易会遇到this指向的问题. 直接上例子: var name = 'my name is window'; var obj = { name: 'my name is obj', fn: function () { var timer = null; clearInterval(timer); timer = setInterval(function () { console.log(this.name);  //my na…
我发现在对JS的学习中有很多朋友对this的指向问题还是有很大的误区或者说只是大致了解,但是一旦遇到复杂的情况就会因为this指向问题而引发各种bug. 对于之前学习过c或者是Java的朋友来说可能这个问题还比较好解决,因为c中指针的指向和Java中类的跳转其实和JS中this的指向有异曲同工之妙. 在这里简单给大家稍微举几个例子  希望对大家有所帮助. JS中this的指向不同于其他语言,JS中的this不是指向定义他的位置,而是在哪调用它它就指向哪里. JS中,普通的函数调用方式有三种:直接…
本文是我个人对this指向的一些理解,如有不足之处,还望大家可以批评指正,在此先谢过了! 首先,我们来回顾一下ES5里函数的几种调用方式: 1⃣️直接调用 foo(); 2⃣️方法调用 obj.foo(); 以上两种调用方法,this的指向可以这样去确定: 函数的调用者就是this的指向! 例如 obj.foo(); 里.foo()前面obj就是调用者,所以this的指向就是obj,而直接调用的foo()等价于window.foo();这样的话,上面两种调用方法的this指向就显而易见了,1⃣️…
抽象的概念 狭义的抽象,也就是代码里的抽象,就是把一些相关联的业务逻辑分离成属性和方法(行为),这些属性和方法就可以构成一个对象. 这种抽象是为了把难以理解的代码归纳成与现实世界关联的概念,比如小狗这样一个对象:属性可以归纳出"毛色"."品种"."年龄"等等:方法(行为)可以归纳出"叫"."跑"."啃骨头"等. 注意:这里的抽象不是指抽象类,抽象类我认为放封装一节讲比较合适. 类的概念和…
在 ES5 中,其实 this 的指向,始终坚持一个原理:this 永远指向最后调用它的那个对象. 例 1: var name = "windowsName"; function a() { var name = "Cherry"; console.log(this.name); // windowsName console.log("inner:" + this); // inner: Window } a(); console.log(&qu…
es5的构造函数前面如果不用new调用,this指向window,对象的属性就得不到值了,所以以前我们都要在构造函数中通过判断this是否使用了new关键字来确保普通的函数调用方式都能让对象复制到属性 function Person( uName ){ if ( this instanceof Person ) { this.userName = uName; }else { return new Person( uName ); } } Person.prototype.showUserNam…
1:ES5简介 ECMAScript 5.1 (或仅 ES5) 是ECMAScript(基于JavaScript的规范)标准的修正. 与HTML5规范进程本质类似,ES5通过对现有JavaScript方法添加语句和原生ECMAScript对象做合并实现标准化. 2:严格模式的意义 相对于正常模式而言: 1:消除Javascript语法的一些不合理.不严谨之处,减少一些怪异行为. 2:消除代码运行的一些不安全之处,保证代码运行的安全. 3:提高编译器效率,增加运行速度. 4:为未来新版本的Java…