this指向问题

复制代码
### this指向问题
1. 普通函数
    ```js
    var name = '张三'
    function getPersonName() {
        console.log(this.name)
    }
    getPersonName() //张三

    //严格模式下 抑制this
    "use strict";
    var name = "张三"
    function getPersonName() {
        console.log(this.name)
    }
    getPersonName() // Cannot read property 'name' of undefined
    ```
2. 普通对象
    ```js
    var obj = {
        name: '张三',
        getPersonName:function() {
            console.log(this.name)
        }
    }
    obj.getPersonName(); //this指向obj
    var fn=obj.getPersonName;
    fn(); // 此时调用 fn 方法,this指向window 对象
    ```
3. 构造函数
    ```js
    function Person(name,age) {
        this.name = name;
        this.age = age;
    }
    var p = new Pweson('张三',19);
    console.log(p.name) //this 指向了该构造函数实例化出来的对象。

    //如果构造函数显式的返回一个对象,那么 this 则会指向该对象。
     function Person(name,age) {
        this.name = name;
        this.age = age;
        this.sex="男";
        return {
            sex : '女'
        }
    }
    var p = new Person("张三",19);
    console.log(p.sex)  //'女'
    //如果该函数不用 new 调用,当作普通函数执行,那么 this 依然指向全局对象。
    
    ```
4. call()或apply()
    > 通过调用函数的 call() 或 apply() 方法可动态的改变 this 的指向。
复制代码

 

posted @   zhupan  阅读(147)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示