博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript中this指向问题
阅读量:6429 次
发布时间:2019-06-23

本文共 1937 字,大约阅读时间需要 6 分钟。

首先在JavaScript中this中表示的是当前函数执行时的当前对象,其实可以理解成当前function执行时是在哪个对象哪里执行的。 当没有明确的表明执行对象的时候,this是指向全局对象window,而在Node是global

  我们通过题目去了解关于this(本文讲的都是不在严格模下的this指向)

 

  题目一

var someone={        name:'Bob',        showName:function () {            alert(this.name)        }    };    var other={        name:'Tom',        showName:someone.showName //其实这里没有执行function,只是相当于把showName复制
};  other.showName();//Tom

  

  题目二

var name='window';	var someone={	    name:'Bob',		showName:function () {		  alert(this.name)          }	};	var other={	    name:'Tom',		showName:someone.showName	};    var show=someone.showName; 因为当前声明的show是一个全局变量,所以this指向的是window    show();//window,可以可以看成是window.show();

 

 题目三

var name='window';	var someone={	    name:'Bob',		showName:function () {			alert(this.name)          }	};	var other={	    name:'Tom',		showName:function () {		var fun=someone.showName;//因为这里的fun没有绑定任何的执行对象,所以默认指向window		fun();          }	};      other.showName();//window

  

    在浏览器中setTimeout、setlnterval和匿名函数执行时都是指向当前全局对象window

 

 题目四

var name='bob';	var nameObj={	    name:'Tom',		showName:function () {			alert(this.name)          },		waitShowName:function () {		! function (__callback) {		   console.log(__callback)                __callback();            }(this.showName)          }	};      nameObj.waitShowName(); //bob

 

 eval相当于在该区域填入代码,用法 eval(string)

var Bon={        name:'bob',        showName:function () {            eavl('alert(this.name)')        }    };        Bon.showName();

 

 那么问题来了,假如有时候我们需要改变函数执行时的对象,把this指向其他对象,那么应该怎么做呢?

  使用apply()、call();

  

var name='window';        var someone={        name:'bob',        showName:function () {            alert(this.name);        }    };    var other={        name:'tom'    };    someone.showName.apply();//window    someone.showName.apply(other);//tom

 

     其他之间有什么区别?

    只有一个区别,就是call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组

    详细请查看、

 

转载于:https://www.cnblogs.com/McLyfeng/p/8432829.html

你可能感兴趣的文章
从事互联网行业,怎样才能快速掌握一门编程语言呢?
查看>>
谈谈fail-fast与fail-safe是什么以及工作机制
查看>>
深入浅出换肤相关技术以及如何实现
查看>>
Redis 基础、高级特性与性能调优
查看>>
React native 第三方组件 React native swiper
查看>>
接口幂等设计
查看>>
编程入门指南
查看>>
移动端的自适应方案—REM
查看>>
你真的懂volatile吗
查看>>
Android 编译时注解-提升
查看>>
说说 Spring AOP 中 @Aspect 的高级用法
查看>>
Workbox CLI中文版
查看>>
贝聊亿级数据库分库分表实践
查看>>
同时连接gitlab和github
查看>>
vuex源码分析
查看>>
香港智远:港股光伏板块中报期有望获资金青睐
查看>>
高峰论坛:专家热议物联网行业如何迎风飞扬
查看>>
企业实施大数据的三个问题和五大关键
查看>>
住建部解析智慧城市停车场建设三大关键问题
查看>>
德州仪器第四季度净利润8.36亿美元 同比增1%
查看>>