js中的this到底是谁

js中函数的4中调用方式

1作为普通函数来调用,this的值指向window,准确的说this为null,但是被解释成了window,但是在ECMA5标准中把null解释成了undefined


function foo(){
  console.log(this.age);
}

foo();

2作为对象的方法来调用,this指向调用那一刻的调用者obj,也就是该对象

 
 var obj={
    xx:999,
    yy:888,
    t:function(){
        alert(this.xx);//相当于obj.xx
    }
 };
obj.t();//999


/*关于调用“那一刻”的例子,虽然原来是obj在调用,
但是在dog.t=obj.t后,调用者成了dog,所以此时this指向了dog
*/
var dog ={
    xx:'huzi'
};

dog.t=obj.t;
dog.t();//huzi

3作为构造函数调用时,也就是声明对象,因为在js中没有类的概念,创建对象是用构造函数来完成的,或者直接用json 来写对象。
形成1个空对象constructor,也就是{};
this指向该空对象



function Animal(name.age){
    this.name = name;
    this.age =  age;
    this.bark:function(){
        console.log('i am'+this.name+'!');
    }
/*this.bark中的this指向空对象constructor,但
    是console中的this指向谁还不知道,因为此时还没有
    调用者
*/
}
var dog = new Animal('huzi',5);//形成对象的一个实例,this此时指向了dog
dog.bark()//i am huzi

.函数作为构造函数时,return的值是忽略的,还是返回对象,
它绑定的this指向新创建的对象,并默认返回对象(this),也就是说,不需要在最后写return this;。

4 函数被call,apply调用时

'函数名.call(对象,参数1,参数2)'
function t(num){
    console.log('我的真实年龄是' + this.age);
    console.log('但我一般告诉别人我的年龄' + (this.age+num);

}
 
 var zhangsan = {
    'name':'zhangsan',
    'age':30
 }
 t.call(zhangsan,5);
 /*
 首先,函数t中的this指向对象(zhangsan);
 然后,运行t(参数1,参数2……参数n);
 这个就是对象冒充

  */


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • title: js面向对象date: 2017年8月17日 18:58:05updated: 2017年8月27日...
    lu900618阅读 582评论 0 2
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,272评论 0 4
  • 没搞错吧!js写了那么多年,this还是会搞错!没搞错,javascript就是回搞错! ………… 在写java的...
    zhoulujun阅读 1,461评论 0 11
  • 我拥有爱与被爱, 拥有孤独,也拥有哀愁 拥有应该拥有的一切 可我不会拥有心静如一潭...
    山与民阅读 357评论 2 1