前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >js中的this指向

js中的this指向

作者头像
用户1141560
发布2018-04-16 17:20:54
4K0
发布2018-04-16 17:20:54
举报
文章被收录于专栏:西安-晁州西安-晁州

js中的this指向

首先,js中的this指向是根据运行时确定的,而非定义时。

js中的this指向大致分为如下几种:

  • 作为对象的方法调用
  • 作为普通函数调用
  • 构造调用
  • call、apply调用

作为对象的方法调用

代码语言:javascript
复制
var obj = {
  a: 1,
  getA: function(){
    alert ( this === obj ); // true
    alert ( this.a ); // 1
  }
};
obj.getA();

作为普通函数调用(浏览器环境)

代码语言:javascript
复制
window.name = 'globalName';
var getName = function(){
  return this.name;
};
console.log( getName() ); // globalName

或者

代码语言:javascript
复制
window.name = 'globalName';
var myObject = {
  name: 'sven',
  getName: function(){
    return this.name;
  }
};
var getName = myObject.getName;
console.log( getName() ); // globalName

构造调用

代码语言:javascript
复制
var MyClass = function(){
  this.name = 'sven';
};
var obj = new MyClass();
alert ( obj.name ); // sven

一般情况下,构造调用时this指向new后的对象,但是有种比较特殊,就是当构造函数return一个对象时(必须是对象,其余类型比如string请忽略)指向该对象。

代码语言:javascript
复制
var MyClass = function(){
  this.name = 'sven';
  return {
  name: 'anne'
  }
};
var obj = new MyClass();
alert ( obj.name ); // anne

返回一个普通字串:

代码语言:javascript
复制
var MyClass = function(){
  this.name = 'sven'
  return 'anne';
};
var obj = new MyClass();
alert ( obj.name ); // sven

call、apply调用

call、apply、bind可以人为改变function的this指向:

代码语言:javascript
复制
var obj1 = {
  name: 'sven',
  getName: function(){
    return this.name;
  }
};
var obj2 = {
  name: 'anne'
};
console.log( obj1.getName() ); // sven
console.log( obj1.getName.call( obj2 ) ); // anne
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-04-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • js中的this指向
    • 作为对象的方法调用
      • 作为普通函数调用(浏览器环境)
        • 构造调用
          • call、apply调用
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档