javascript 中的this

Javascript 中的this关键字,记住一句话就行:this指调用函数的那个对象。在一个使用方法调用语法, obj.myFunction()或者 obj['myFunction'](),这时this的值为obj

话是这么说,但是刚看到这话,很难有深入理解,特别是有其他OO语言经验的同学。对于Javascript,如果知道其他OO语言的语法,对于有些概念的理解,你可能是从负数开始,比从零开始都不如~~。当然,如果你对C++JavaC#有深入理解,那么还是会发现很多共同之处的。

加入了面向对象的概念后,代码从面向过程的一个个的函数调用,变成了针对对象进行操作。我们可以向下面这样写代码

 

public class A

{

   private int i;
   public void methodA()
   {}

 

   public void methodB(int a)
   {
     this.i =a;
   }
}

...
A a = new A();
a.methodA();
a.methodB();

 

实际上,对于methodA和methodB,编译后,可以认为它们长成这样

 

void methodA(A  this){}

void methodB(A  this,int a){this.i = a}

 

this不是平白就有得,是编译器给我们添加的。

需要说明一下:this本身不能变化,this指向的对象可以改变,不同语言表示this本身不能变得语法不一样,所以这里没写。

对于Java或C#这类语言,methodA的第一个参数只能是A对象或其子类。

 

Javascript是弱对象语言,没法对函数参数的类型进行提前检测。

比如:

function log()
{
   console.log(this.name);
}

相当于

function log( this)//不带类型限制
{  
  console.log(this.name);
}


所以,

var a={name:"a"};

a.aLog = log;

a.aLog();

相当于aLog(a),于是this被赋值成a,自然回去找a["name"],找到,输出a

如果直接调用log();在浏览器环境下,相当于log(window);window中,我们还没定义name属性,所以输出undefined

 

另外多讲一个例子:

function Person()
{
        this.name = "jzl";
        this.age = 25;
        this.info = function{

               console.log(this.name+":"+this.age);
        }
}

var p = new Person();

最后一句话,相当于

var p = {};

Person(p);

把p当作this,传进Person函数,函数执行完后,p有拥有了name,age,info属性。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值