js中this的知识点

1.this始终指向调用它的对象,但是难点就是判断这个对象是哪个;
(1)

function a(){
    console.log(this===window)
}
a();
//true

(2)

function a(){
    console.log(this===window)
}
function b(){
    a();
}
b();
//true

(1)函数内部普通方式下,调用该段代码的直接对象是全局对象,即”window” ;(2)处虽然是函数,但是调用其的仍然是”window“(不要弄混了,函数虽然是对象,但是调用它的是另一个对象);没有实例引用所以还是指向window.

function a(){
return function(){
    console.log(this===window);}
}
var b = a();
b();
//true

即使是return方式,this依然指向window.

function a(){
var b = function(){
    console.log(this===window);
    }
    b();
}
a();
//true

函数内部嵌套,但是都指向window.原因是从最外层函数开始每层都是被window调用,即使你嵌套一千层,调用各个函数的都是’window’对象。
(3)

var test = function(){
  alert(this === window);
 }
new test();
//false

这里test被看作构造函数,并创建了一个空的实例,所以this指向调用构造函数的这个实例
(4)

var test ={
  'a':1,
  'b':function(){
   alert(this === test)
  }
 }
test.b();
//true

这里是对象引用的方式,而不是函数,’b’元素是一个函数,所以this指向的是对象test.

var test ={
  'a':1,
  'b':{
      'c':function(){
       alert(this === test)
       }
  }
 }
test.b.c();
//false

this指向的是调用它的对象,所以这是是test.b调用的,this应该指向test.b
(5) call与apply

var test = function(){
  alert(this === test1);
 }
var test1 = {
}
test.apply(test1);
//true

call,apply都是test1调用test的,所以自然this会指向test1.
(6)原型

var test = function(){
 }
 var my = function(){
  this.a = function(){
   alert(this === mytest2);
  }
 }
 var mytest = new my();
 test.prototype = mytest;
 var mytest2 = new test();
 mytest2.a();

结果是true,首先this指向了实例mytest,然后被原型继承给test,原型继承,改变this指向,这样this就会指向test,最后又指向了test()的实例mytest2.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值