📖This 指向
This 指向
– 浏览器在调用函数每次都会向函数内部传递一个隐含的参数
– 这个隐含参数就是this , this 指向的是一个对象
– 这个对象指向的是函数执行的上下文对象
– 根据函数调用的不同,this 指向的对象也不同
1:在函数中,this永远指向的是windows
2:在对象中,this指向的是这个对象
3:在构造函数(new)中,this指向的是这个新创建的对象
4:在方法中,this 表示该方法所属的对象
5:在事件中,this 表示接受事件的元素
6:如果单独使用,this 表示全局对象
7:通过call(),apply(),bind()改变函数执行情况下.this就会指向其他对象
//以函数的形式调用: var Tisonename = '小黄'; function Tisone(){ Tisonename = '小红'; console.log(this.Tisonename); } Tisone();//小红
//以对象的形式调用: function Creatone(name,sex,age){ this.name = name; this.sex = sex; this.age = age; return this.name+this.sex+this.age; } var objone = Creatone("小红","女",18); var objtwo = Creatone("小绿","男",28); console.log(objone);
修改This 指向
– apply() 语法:原对象.方法.apply(指向对象,[“实参1″,”实参2″]);
– call() 语法:原对象.方法.call(指向对象,”实参1″,”实参2”)
– bind() 语法:原对象.方法.bind(指向对象)(); bind返回的是一个函数,你必须调用它才会执行
//apply() var appobj={ name:'孙悟空', age : 19, fasename:function(one,two){ console.log(this.name+" "+one+" "+two); } } var appobjtwo={ name:"猪八戒" } appobj.fasename.apply(appobjtwo,["你好","世界"]); //call() var callobj={ name:'唐僧', age : 19, fasename:function(one,two){ console.log(this.name+" "+one+" "+two); } } var callobjtwo={ name:"沙和尚" } callobj.fasename.call(callobjtwo,"西游","世界"); //bind var bindobj={ name:'白骨精', age : 19, fasename:function(one,two){ console.log(this.name+" "+one+" "+two); } } var bindobjtwo={ name:"女儿国" } bindobj.fasename.bind(bindobjtwo,"皇帝","世界")();
🧐发表评论