JavaScript中this关键字

JavaScript中this关键字用法较为灵活,用处较多,主要有以下几种方式:

1.浏览器中,全局的this指向window;

        console.log(this===window);
	console.log(this);
	this.a='nice';
	console.log(window.a);

   验证结果如下:

2.作为对象方法的函数this;

	function sum(){
		return this.x+this.y;
		}
	var obj={"x":1,"y":2};
	obj.z=sum;
	console.log(obj.z());
	
	var obj1={
		x:1,y:2,
		z:function(){
			return this.x*this.y;
			}
		}
	console.log(obj1);
	console.log(obj1.z());

验证结果如下:

把函数作为对象属性的值也称作为对象的方法,this指向对象,该属性可理解为需调用方法,使用时需加上().

3.对象原型链上的this;

	var o={f:function(){
		   return this.x+this.y;
		}}
	var obj=Object.create(o);
	obj.x=1;
	obj.y=2;
	console.log(obj.f());

 验证结果如下:

obj的原型是o,通过o的this关键字可以拿到当前对象obj,同时,obj的属性f也可上溯至原型链o。

4. get/set方法与this;

	var obj={
		x:1,
		y:2,
		get z(){
			  return this.x**2+this.y**2;
			}
		};
	function w(){
			return Math.sqrt(this.x**2+this.y**2);
		}
	Object.defineProperty(obj,'w',{get:w,enumerable:true,configurable:true});
	console.log(obj.z,obj.w);

验证结果如下:

this可以得到当前对象,便于通过get给当前对象的属性赋值.

5.构造器中的this;

	function MyClass(){
		   this.a=35;
		   //无return关键字,则返回this;
		}
	var obj=new MyClass();
	//使用new创建,则对象obj会指向MyClass.prototype.
	console.log(obj.a);

验证结果为:

this还有许多用到的地方,比如call,apply,bind方法,在此不一一列举。可自行写码验证。

猜你喜欢

转载自blog.csdn.net/qq_34538534/article/details/82803883