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
作者:程序员小波与Bug
出处:https://codetrips.cn
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题,可以邮件:caiya928@aliyun.com
QQ:1419901425 联系我
如果喜欢我的文章,请关注我的公众号:程序员小波与Bug
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· RFID实践——.NET IoT程序读取高频RFID卡/标签