this是什么

这里先贴一下原文作者HARRISKING
我在这里换一种表达
要调用一个函数,有几种方式
1、方法调用模式,函数在对象里面的时候,叫做对象的属性,也是对象的方法,此时是对象

此时的this:当一个方法被调用的时候,this绑定到该对象上,所以是这个对象里面的东西。

var obj = {
	name:"harrisking",
	foo: function(){
		console.log(this.name);			//输出harrisking
//这里的this指的就是对象obj;
			}
	}

2、函数调用模式,函数不在对象里的时候,就是一个函数,此时是全局

此时的this:以此模式调用函数时,this被绑定到全局对象(window)。

var a = function(){
	console.log(this.b())		//全局函数里面出现了this,抓住了window里的b()
	}
var b = function(){				//定义在全局的函数
	console.log("马达,又躺枪!")
	}
a();	//"马达,又躺枪!"所以这里的this是全局的window

3、构造器调用模式,函数前面带上一个new来调用,则该函数就是作为构造函数来调用的。此时是构造器

当一个构造函数前加上new的时候,背地里来做了四件事:
1,生成一个空的对象并将其作为 this;
2,将空对象的proto 指向构造函数;
3,运行该构造函数;
4,构造函数没有 return 或者 return 一个返回 this 值是基本类型,则返回this;如果 return 一个引用类型,则返回这个引用类型。
此时的this:这时候,this被绑定到了新构造的对象上。

var People = function(name,age){
	this.minzi = name;		//这里就是把输入到函数的参数值,给到这个函数去绑定,name是传入参数
	this.nianlin = age;
	};
var p1 = new People('harrisking',23); 		//就是行话,new一个新对象,给新对象传入参数,把对象给实例化,做运算输出都可以
p1.minzi;		//harrisking;

4、apply调用模式(用到再说)

apply和call的方法很像,它拥有两个参数:一个是预设定的this,一个是要传递的参数(apply传递的是数组)。

var person = {
  fullName: function(city, country) {
    firstName:"这个";
  lastName: "不计";
    return this.firstName + " " + this.lastName + "," + city + "," + country;
  }
}


var person1 = {
  firstName:"Bill",
  lastName: "Gates"
}

//借用person1的属性或方法,让fullname里面this指向为它,所以fullname里面就算指定有firstName和lastName,也会被重定向
var x = person.fullName.apply(person1, ["Seatle", "USA"]);    //输出Bill Gates,Seatle,USA
var y = person.fullName.apply(person1, "Seatle", "USA");    //输出Bill Gates,Seatle,USA

apply 的所有参数都必须放在一个数组里面传进去
call 的参数是直接放进去的,第二第三第 n 个参数全都用逗号分隔,直接放到后面

你可能感兴趣的:(js)