javascript嵌套函数作为方法调用
怪我咯
怪我咯 2017-04-10 15:51:37
[JavaScript讨论组]

黄字部分如何理解?

截图来自javascript权威指南,这本书里所讲的方法特指对象中的函数。

函数的的调用方式也有几种:
方法调用 o.m();
函数调用 f();
....

那么嵌套函数或者说内部函数,如何实现方法调用?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(3)
天蓬老师

在JavaScript中,this不仅跟上下文有关,还跟它所在环境的调用方式有关。

跟上下文的关系

看这样一段代码

var name = 'pomy';
console.log(this.name);  //'pomy',this指向window

var per = {
  name: '不写代码的码农',
  getName: function(){
    console.log(this.name);
  }
}
per.getName();  //'不写代码的码农'   this指向调用getName的对象

跟环境的调用方式

在JavaScript中,this的指向可以通过callapplybind改变,举个粟子:

var per = {
  name: '不写代码的码农',
  getName: function(){
    console.log(this.name);
  }
}
var per2 = {
  name: 'pomy'
}
per.getName.call(per2);  //'pomy'
per.getName();           //'不写代码的码农'        

通过call就显示的改变的this的指向。

如果有nested functionthis的指向又会不同,举个粟子:

var test = {
    id: 'nested function',
    getName: function(){
        console.log(this.id);   //this指向 test对象,输出'nested function'
        var dom = document.getElementById('test');
        dom.click(function(){
            console.log(this.id); //this指向dom,输出dom的id
        })
    }
}

关于this指向的总结,可以看这篇文章:JavaScript面试问题:事件委托和this

大家讲道理

有不止一种方法可以将嵌套函数作为方法调用。例如使用call或apply:

f.call(o);

这句相当于在o对象上调用f方法。

另外一种方法是将函数设置为某个对象的属性,使其成为该对象的方法,例如:

var o = {};
function outer() {
    var inner = function() {
        console.log(this === o);
    };
    o.m = inner;
}
outer();
o.m(); // print "true"
ringa_lee

理解函数中的this不是在定义的时候决定的,其是在运行解释的过程中以调用方法的不同而决定的这个是关键

方法调用就是作为一个对象的函数属性调用
o.f();//方法调用

var t=o.f;
t();//函数调用

也可以通过
call/apply方法手工的改变函数this的指向
bind方法也可以的

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

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