JavaScript 中 this 指向问题
迷茫
迷茫 2017-04-10 14:26:03
[JavaScript讨论组]

请教各位大神。当调用函数的 call 方法时,内部的 this 究竟是如何指向的?

call 传入为对象时这个比较好理解。this 直接指向这个对象。但是当传入的是一个函数呢?比如下面这个例子

function class1 () {
    this.message = "yeah";
}

function class2 () {
    this.sayMessage = function () {
        alert(this.message);
    }
}

class2.call(class1);
alert(class1.sayMessage);
class1.sayMessage(); //undefined

class 可以获得 sayMessage 这个方法。但是执行这个方法返回的结果是 undefined 。我个人的理解是因为没有定义 class1.message ,所以返回未定义。但是,当代码改为如下时,我蒙了。

var message = "hi";

function class1 () {
    this.message = "yeah";
}

function class2 () {
    this.message = "hello";
    this.sayMessage = function () {
        alert(this.message);
    }
}

class2.call(class1);
alert(class1.sayMessage);
class1.sayMessage(); // hello

class1.message = "msg";

class1.sayMessage(); //msg

当未对 class1.message 赋值时,调用 class1.sayMessage() 为何返回的是 class2 中的 message 属性??整个过程中 this 究竟是如何指向的?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
黄舟

自问自答吧。

刚刚仔细想了一下,终于明白了。

当调用 class2.call(class1) 时,class1 获得 class2 中的 message 属性。所以此时 class1.message = "hello" 。调用 sayMessage 方法则返回 class1中的 message 值。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号