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,"皇帝","世界")();

标签

发表评论

您必须启用javascript才能在此处查看验证码