javascript this指向

1、作为对象的方法调用

			// 作为对象被调用
			var obj = {
				a:1,
				getName:function(){
					console.log(this === obj);
					console.log(this.a);
				}
			}
			obj.getName(); // true 1

浏览器结果
在这里插入图片描述
2. 作为普通函数调用

			window.name = 'globalName';
			var getName = function(){
				return this.name;
			}
			console.log(getName()); // globalName
		window.name = "globalName";
		var myobj = {
			name:'freddy',
			getName:function(){
				return this.name;
			}
		}
		var getName = myobj.getName;
		console.log(getName()); // globalName

在 ECMAScript 5 的 strict 模式下,这种情况下的 this 已经被规定为不会指向全局对象,而
是 undefined:
function func(){
“use strict”
alert ( this ); // 输出:undefined
}
func();

3. 构造器调用

			// 作为构造器使用
			var Myclass = function (){
				this.name = 'freddy';
			} 
			var myclass = new Myclass();
			console.log(myclass.name); // freddy
			
			console.log("=========3========")
			
			var Animal = function(){
				this.name = "动物";
				// 显式返回一个对象类型数据
				return {
					name:"seven"
				}
			}
			var animal = new Animal();
			console.log(animal.name); // seven
			
			console.log("=========4========")
			
			var Person = function(name){
				this.name = name;
				// 显式地返回一个非对象类型数据
				return "name";
			}
			
			var p = new Person("freddyhuang");
			console.log(p.name); // freddyhuang

显式地返回了一个 object 类型的对象,那么此次运算结果最终会返回这个对象,如果构造器不显式地返回任何数据,或者是返回一个非对象类型的数据,就不会造成上述问题

4. Function.prototype.call 或 Function.prototype.apply 调用

			//  Function.prototype.call 或 Function.prototype.apply 调用
			var obj1 = {
				name:'fredddy',
				getName:function(){
					return this.name;
				}
			}
			
			var obj2 = {
				name:'seven'
			}
			console.log(obj1.getName()) // fredddy
			console.log(obj1.getName.call(obj2)) // seven
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春风得意之时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值