javascript 中的this

来源:互联网 发布:计量型数据定义 编辑:程序博客网 时间:2024/06/05 20:43

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属性。

 

原创粉丝点击