【JS】this指向

一、含义

  1. this是系统定义好的变量,本质上是一个对象,一般在函数(方法)中使用
  2. this指向调用该函数的对象

二、指向

  1. 在函数(方法)中使用(被调用)
    谁调用该函数(方法),this就指向谁
    this的指向只与调用有关,与函数在哪里定义无关
  2. 在构造函数中使用(被实例化)
    this指向实例化出来的新对象

前面看不见什么.的指向window

三、window介绍

  1. window表示浏览器窗口,在打开页面的时候自动创建
  2. 运行在浏览器上的JS,window是全局对象
  3. 所有的全局变量(包括函数)都是window的属性,可以通过window调用,使用window属性的时候可以省略window

四、this指向的题目

var name = "222";
var a = {
	name: "111",
	say: function () {
		console.log(this.name);
	}
}
var fun = a.say;
fun();		// 222	this指向window
a.say();	// 111	this指向a
 
var b = {
	name : "333",
	say: function (func){
		func();
	}
}
b.say(a.say);	// 222 this指向window,func()调用了
b.say = a.say;	
b.say();		// 333 this指向b
var foo = 123;
function print(){
    this.foo = 234;	       // 此时this指向window, window.foo就是全局变量
    console.log(foo);      // 234
}
print();

console.log(foo);			// 234
var a = 5;
function test(){
    a = 0;
    console.log(a);			
    console.log(this.a);	
    var a;
    console.log(a);			
}
test()	//0 5 0
new test()	//0 undefined 0
var age = 10;
function func(name, age) {
    this.name = name;
    this.age = age;
    this.getInfo = function() {
        console.log(this.name);
        console.log(this.age);
    }
    console.log(this.name);
}
// 调用func,里面的this指向window,this.name是Tom,this.age是19
func('Tom', 19);

// 实例化func,里面的this只想实例化出来的新对象,this.name是Tom
var o = new func('Tom', 19);

o.getInfo();	// Tom 19
console.log(age);	//19 第一个调用func就改变了全局变量
var age = 20;
var obj = {
    age: 10,
    getAge: function() {
        console.log(this.age);
    }
}
var obj1 = {
    age: 30
};
//给obj1设置属性 属性名是prop 属性值是对象obj
obj1.prop = obj;
var fn = obj1.prop.getAge;

obj.getAge();	//10 obj调用了
obj1.prop.getAge();	//10 obj调用了(obj1.prop调用了,并不是obj1)
fn();			//20 window调用了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值