JavaScirpt(JS)的this细究

一、js中function的不同形态

  js中类和函数都要通过function关键字来构建。

1、js中当函数名大写时,一般是当作类来处理

1
2
3
4
5
6
7
8
9
10
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中函数名小写,当做函数来处理

1
2
3
4
5
function test() {
    console.log(this);
}
// 等同于window.test,因此这里的this代指的是window
test();   // 输出:Window

3、自执行函数,同上面等价

  自执行函数,同上面等价,this也是代指的window。

1
2
3
(function () {
    console.log(this);   // 输出:Window 
})()

二、复合案例

1、类和函数结合案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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、自动实例化案例

1
2
3
4
5
6
7
8
9
10
11
12
obj = {
    name: '文州',
    age: 19,
    getName:function () {
        console.log(this.name);   // 文州
        var that = this;
        (function () {
            console.log(that.name);   // 文州
        })()
    }
}
obj.getName();

  

 

posted @   休耕  阅读(323)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示