关于this指向及其改变指向的问题
来源:互联网 发布:正交矩阵性质 编辑:程序博客网 时间:2024/06/05 00:49
之前被学长问到过关于改变this指向的问题,但是没能完整的回答上来,所以今天就关于这个问题的再看了看
1.关于this指向的问题,我用代码来描述
<input type="button" value="button1"><input type="button" value="button2"><script> //普通函数声明 function a() { console.log(this); //window } a(); console.log("--------------------------------"); //函数声明赋给变量 var b = function () { console.log(this); //window }; b(); console.log("--------------------------------"); //在构造函数中的this指向 function c() { this.name = "luoYi"; this.age = 19; console.log(this); //window }; c(); console.log("--------------------------------"); //对象方法调用 var d = { run : function (){console.log(this);} //run }; d.run(); console.log("--------------------------------"); //事件绑定 var aInput = document.querySelectorAll("input"); aInput[0].onclick = function () { console.log(this); //aInput[0] }; console.log("--------------------------------"); //事件监听 aInput[1].addEventListener("click",function () { console.log(this); //aInput[1] }); console.log("--------------------------------");</script>
2.关于改变this指向的几种方法
1. call()方法(用作继承时)
function c() { this.name = "luoYi"; this.age = 19; console.log(this); //window } function c1() { c.call(this,age); ////把this指向c,同时还可以传递参数 //console.log(this); } c(); var test = new c1(); c.age = 20; console.log(test.age); //19 console.log(test.name); //luoYi test.name = "chenHao"; console.log(test.name); //chenHao
2.apply()方法
console.log(Math.max.apply(null,[1,2,3,4])); //4
3.bind()方法(es5里面的方法)
它会创建一个函数的实例,其this的值会被绑定到传给bind()函数的值
window.color = "red"; var dn = { color:"blue" }; function sayColor() { console.log(this.color); } var objSayColor = new sayColor.bind(dn); objSayColor(); //blue
4. arguments.callee()
在递归函数中,用
arguments.callee()
改变this的指向,以至于后面调用的时候this的指向不会被改变
function aaa(n){ return n<=2 ? 1 : arguments.callee(n-2)+arguments.callee(n-1);}alert(aaa(8));
3.关于call()和apply()方法的概念和区别
区别:
apply()
方法接收两个参数:一个是在其中运行函数的作用域,另一个是参数数组。其中,第二个参数可以是 Array 的实例,也可以是arguments 对象。
call()
方法与 apply() 方法的作用相同,它们的区别仅在于接收参数的方式不同。对于 call()方法而言,第一个参数是 this 值没有变化,变化的是其余参数都直接传递给函数。换句话说,在使用call() 方法时,传递给函数的参数必须逐个列举出来。apply的第二个参数是散列分布,call则可以是一个数组
call方法:
语法:call(thisObj,Object)
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
apply方法:
语法:apply(thisObj,[argArray])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
阅读全文
0 0
- 关于this指向及其改变指向的问题
- 关于this指向问题
- 关于this指向问题
- 关于this指向问题
- this指向,改变this指向
- 关于this的指向
- 关于this的指向
- this的指向问题
- 关于javascript的this指向问题
- 关于this的指向问题(通俗易懂)
- 关于函数中this指向的问题
- 关于js中的this的指向问题
- js中的this指向和改变this指向的方法
- 解决js绑定事件this指向发生改变的问题
- 关于this指向的理解
- 关于this指向的理解
- this指向详解及改变它的指向的方法
- javascript 的 this 指向问题
- ARM9 SWI软件中断
- HTTP Status 400
- 用python学概率与统计(第三章)描述性统计:数值方法
- debian 8.2 bond 双网卡
- 冬天到了,分享两款雪花特效代码
- 关于this指向及其改变指向的问题
- IT行业里的风险投资
- 哈尔滨理工大学第七届程序设计竞赛初赛(高年级组)B、C【water】
- IT
- 算法——中国剩余定理(孙子定理)
- Spring中Bean及@Bean的理解
- 关于get_magic_quotes_gpc()函数
- Python学习之Pandas的安装
- 密码学原理_Crypto++实现RSA加密