JavaScript中的this

通过这样的方式也可以把一个独立的函数的作用域变成一个对象:

var person={
   name:"anna"
}
function independent(){
   alert(this.name);
}
person.func = independent;
person.func();//anna

原型链上的this

替换为实例对象本身:

var o={
   f:function(){
      alert(this.a+this.b);
   }
}
var p=Object.create(o);   //p的原型对象是o
p.a=1;
p.b=2;     //增加实例属性
p.f();    //3

在调用p.f时,会在原型对象o上查找到该方法,原型对象上的this被替换为实际的对象p。

构造器中的this

通过new方法调用一个构造函数,会返回一个对象,这个对象的原型对象是 构造函数.prototype。而构造函数中的this则指向这个返回的对象。如果构造函数中没有写return语句或者返回基本类型的数据,那么会将this返回。

function MyClass(){
   this.a=37;
}
var o=new MyClass();
alert(o.a)  //37

这里,this指向一个空对象(由new MyClass()返回),由于通过this.a为这个空对象增加了属性a,随后又把返回的对象(this)赋值给o,即o也指向这个对象,因此通过o.a可以访问其属性。总结一句话就是:this指向实例对象。
但是如果构造函数中返回了一个对象,那么就不会返回this,而是将实际的对象返回:

function MyClass2(){
   this.a=37;
   return{
      a:38
   };
}
var o =new MyClass2();
alert(o.a); //38

bind和this

想要将方法中的this对象替换成某个对象,就将其作为第一个参数传递给bind。

function f(){
    return this.a;
}
var g = f.bind({a:"test"});
alert(g()); //test

var o={
   a:37,
   f:f,
   g:g
}
alert(o.f);//37
alert(o.g);//test

bind可实现一次绑定,多次调用,而不管调用方式是怎么样的,其作用域都是之前绑定好的那个。例如上述代码中的g。这样相比call和apply更方便。
通过 Object.prototype.toString.call() 进行类型判断

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值