js中的this指向

js中的this指向

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

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

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

作为对象的方法调用

var obj = {
a: 1,
getA: function(){
alert ( this === obj ); // true
alert ( this.a ); // 1
}
};
obj.getA();

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

window.name = 'globalName';
var getName = function(){
return this.name;
};
console.log( getName() ); // globalName

或者

window.name = 'globalName';
var myObject = {
name: 'sven',
getName: function(){
return this.name;
}
};
var getName = myObject.getName;
console.log( getName() ); // globalName

构造调用

var MyClass = function(){
this.name = 'sven';
};
var obj = new MyClass();
alert ( obj.name ); // sven

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

var MyClass = function(){
this.name = 'sven';
return {
name: 'anne'
}
};
var obj = new MyClass();
alert ( obj.name ); // anne

返回一个普通字串:

var MyClass = function(){
this.name = 'sven'
return 'anne';
};
var obj = new MyClass();
alert ( obj.name ); // sven

call、apply调用

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

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
posted @   程序员小波与Bug  阅读(323)  评论(4编辑  收藏  举报
编辑推荐:
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
阅读排行:
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· RFID实践——.NET IoT程序读取高频RFID卡/标签
点击右上角即可分享
微信分享提示