JavaScript this 关键词

实例

复制代码
<!DOCTYPE html>
<html lang="en">

<body>
    <p id="demo"></p>
    <script>
        var person = {
            firstName: "rose",
            lastName: "li",
            id: 888,
            fullName: function () {
                return this.firstName + "" + this.lastName;
            }
        };
        document.getElementById("demo").innerHTML = person.fullName();
    </script>
</body>

</html>
//roseli

this 是什么?

JavaScript this 关键词指的是它所属的对象。

它拥有不同的值,具体取决于它的使用位置:

  • 在方法中,this 指的是所有者对象。
  • 单独的情况下,this 指的是全局对象。
  • 在函数中,this 指的是全局对象。
  • 在函数中,严格模式下,this 是 undefined。
  • 在事件中,this 指的是接收事件的元素。

call()apply() 这样的方法可以将 this 引用到任何对象。

方法中的 this

在对象方法中,this 指的是此方法的"拥有者"。

在本页最上面的例子中,this 指的是 person 对象。

person 对象是 fullName 方法的拥有者。

复制代码
<!DOCTYPE html>
<html lang="en">

<body>
    <p id="demo"></p>
    <script>
        var person = {
            firstName: "rose",
            lastName: "li",
            id: 888,
            fullName: function () {
                return this.firstName + "" + this.lastName;
            }
        };
        document.getElementById("demo").innerHTML = person.fullName();
    </script>
</body>

</html>
//roseli

单独的 this

在单独使用时,拥有者是全局对象,因此 this 指的是全局对象。

在浏览器窗口中,全局对象是 [object Window]

复制代码
<!DOCTYPE html>
<html lang="en">

<body>
    <p id="demo"></p>
    <script>
        var x = this;
        document.getElementById("demo").innerHTML = x;
    </script>
</body>

</html>
//[object Window]

在严格模式中,如果单独使用,那么 this 指的是全局对象 [object Window]

实例

复制代码
"use strict";
var x = this;

函数中的 this(默认)

在 JavaScript 函数中,函数的拥有者默认绑定 this

因此,在函数中,this 指的是全局对象 [object Window]

实例

复制代码
<!DOCTYPE html>
<html lang="en">

<body>
    <p id="demo"></p>
    <script>
        document.getElementById("demo").innerHTML = myFunction();
        function myFunction() {
            return this;
        }
    </script>
</body>

</html>
//[object Window]

函数中的 this(严格模式)

JavaScript 严格模式不允许默认绑定。

因此,在函数中使用时,在严格模式下,this 是未定义的(undefined)。

实例

复制代码
<!DOCTYPE html>
<html lang="en">

<body>
    <p id="demo"></p>
    <script>
        "use strict";
        document.getElementById("demo").innerHTML = myFunction();
        function myFunction() {
            return this;
        }
    </script>
</body>

</html>
//undefined

事件处理程序中的 this

在 HTML 事件处理程序中,this 指的是接收此事件的 HTML 元素:

实例

复制代码
<!DOCTYPE html>
<html>

<body>

    <h1>JavaScript <b>this</b> 关键词</h1>

    <button onclick="this.style.display='none'">单击来删除我!</button>

</body>

</html>

对象方法绑定

在此例中,this 是 person 对象(person 对象是该函数的"拥有者"):

实例

复制代码
<!DOCTYPE html>
<html>

<body>
    <p id="demo"></p>

    <script>
        // 创建对象:
        var person = {
            firstName: "Bill",
            lastName: "Gates",
            id: 678,
            myFunction: function () {
                return this;
            }
        };

        // 显示来自对象的数据:
        document.getElementById("demo").innerHTML = person.myFunction();
    </script>

</body>

</html>
//[object Object]

<!DOCTYPE html>
<html>

<body>

    <p id="demo"></p>

    <script>
        // 创建对象:
        var person = {
            firstName: "Bill",
            lastName: "Gates",
            id: 678,
            fullName: function () {
                return this.firstName + " " + this.lastName;
            }
        };

        // 显示来自对象的数据:
        document.getElementById("demo").innerHTML = person.fullName();
    </script>

</body>

</html>
//Bill Gates

换句话说,this.firstName 意味着 this (person)对象的 firstName 属性。

显式函数绑定

call()apply() 方法是预定义的 JavaScript 方法。

它们都可以用于将另一个对象作为参数调用对象方法。

您可以在本教程后面阅读有关 call()apply() 的更多内容。

在下面的例子中,当使用 person2 作为参数调用 person1.fullName 时,this 将引用 person2,即使它是 person1 的方法

复制代码
<!DOCTYPE html>
<html>

<body>

    <p id="demo"></p>

    <script>
        var person1 = {
            fullName: function () {
                return this.firstName + " " + this.lastName;
            }
        }
        var person2 = {
            firstName: "rose",
            lastName: "chen",
        }
        var x = person1.fullName.call(person2);
        document.getElementById("demo").innerHTML = x;
    </script>

</body>

</html>
//rose chen
相关推荐
晔子yy11 小时前
【JAVA探索之路】从头开始讲透、实现单例模式
java·开发语言·单例模式
遇见你...13 小时前
TypeScript
前端·javascript·typescript
Highcharts.js13 小时前
Highcharts Grid 中文站正式上线:表格数据处理的全新选择
前端·javascript·数据库·表格数据·highcharts·可视化图表·企业级图表
阿正的梦工坊16 小时前
JavaScript 微任务与宏任务完全指南
开发语言·javascript·ecmascript
知行合一。。。16 小时前
Python--05--面向对象(属性,方法)
android·开发语言·python
青梅橘子皮16 小时前
C语言---指针的应用以及一些面试题
c语言·开发语言·算法
浅时光_c17 小时前
3 shell脚本编程
linux·开发语言·bash
Evand J17 小时前
【三维轨迹目标定位,CKF+RTS,MATLAB程序】基于CKF与RTS平滑的三维非线性目标跟踪(距离+方位角+俯仰角)
开发语言·matlab·目标跟踪
今天又在写代码18 小时前
java-v2
java·开发语言
competes19 小时前
慈善基金投资底层逻辑应用 顶层代码低代码配置平台开发结构方式数据存储模块
java·开发语言·数据库·windows·sql