JavaScirpt(JS)的this细究
2024-09-29 07:54:05
一、js中function的不同形态
js中类和函数都要通过function关键字来构建。
1、js中当函数名大写时,一般是当作类来处理
function Foo(name, age) {
this.name = name;
this.age = age;
this.getName = function () {
console.log(this.name)
}
} obj = new Foo('文州', 19); // 实例化一个对象
obj.getName(); // 输出:文州
2、js中函数名小写,当做函数来处理
function test() {
console.log(this);
}
// 等同于window.test,因此这里的this代指的是window
test(); // 输出:Window
3、自执行函数,同上面等价
自执行函数,同上面等价,this也是代指的window。
(function () {
console.log(this); // 输出:Window
})()
二、复合案例
1、类和函数结合案例
var name = '景女神';
function Foo(name, age) {
this.name = name;
this.age = age;
this.getName = function () {
console.log(this.name); // 文州
(function () {
console.log(this.name); // 景女神(打印的外部全局变量)
})()
}
} obj = new Foo('文州', 19);
obj.getName(); // 文州 景女神
生成对象后,对象执行getName方法,此时this.name是输出的当前对象的name,因此是输出文州。随后再执行自执行函数,这里的this指代的是window对象,获取全局name变量,因此输出景女神。
2、让上例中自执行函数也打印对象的name
var name = '景女神';
function Foo(name, age) {
this.name = name;
this.age = age;
this.getName = function () {
console.log(this.name); // 文州
var that = this;
(function () {
console.log(that.name); // 文州(打印的外部全局变量)
})()
}
} obj = new Foo('文州', 19);
obj.getName(); // 文州 文州
3、自动实例化案例
obj = {
name: '文州',
age: 19,
getName:function () {
console.log(this.name); // 文州
var that = this;
(function () {
console.log(that.name); // 文州
})()
}
}
obj.getName();
最新文章
- Xamarin.Android活动的生命周期
- 手机响应式js轮播基础
- ubuntu 下非交互式执行远程shell命令
- 转一篇关于Unity的PlayMaker
- wampserver 2.5安装pear win8.1
- Joda-time是java处理时间非常棒的jar
- Excel去重
- Windows Azure 使用体验
- 微信公众号开发第二课 百度BAE搭建和数据库使用
- 匹配 prev 元素之后的所有 siblings 元素
- hdu 5317 RGCDQ(前缀和)
- java_spring_依赖注入(构造器)
- JAXB - Hello World with Namespace
- Keil C51编译及连接技术
- if最简单的用法
- Users is not mapped(Hibernate实体类采用注解)
- CoreAnimation 视觉效果
- Spring中Quartz的配置及corn表达式
- window上杀死node进程
- 了解AutoCAD对象层次结构 —— 3 ——数据库
热门文章
- 一道组合数问题--出自 曹钦翔_wc2012组合计数与动态规划
- PHP简单实现一言 / 随机一句功能
- 洛谷P2800 又上锁妖塔
- mysql5.6 的st_distance 实现按照距离远近排序。
- 洛谷P2146 [NOI2015]软件包管理器
- DenyHosts 阻止SSH暴力攻击
- 2019.3.13 final与static
- Python爬虫常用之HtmlParser
- maven的resources插件
- mysql大数据表删除操作锁表,导致其他线程等待锁超时(Lock wait timeout exceeded; try restarting transaction;)