想花 3 天速览一下 js 所以用的菜鸟 看到函数的第三部分有点疑惑
百度的搜索结果看起来像乱码.......
![]() | 1 hkingstu 2021-03-01 22:07:28 +08:00 via iPhone 没区别 |
2 renmu123 2021-03-01 22:10:51 +08:00 via Android 我也觉得在 js 中方法和函数没什么区别,在别的语言中,函数就是 function,而方法( method )是在类中,js 中这两者分得没那么清楚。 参考: https://stackoverflow.com/questions/155609/whats-the-difference-between-a-method-and-a-function 参考: https://segmentfault.com/q/1010000000420497 ps:学习编程千万不能用百度 |
![]() | 3 misakawaque OP @hkingstu 菜鸟里有这么一句话:"在 Javascript 中, 函数是对象。Javascript 函数有它的属性和方法。" 这个怎么理解啊 |
![]() | 4 smallyu 2021-03-01 22:10:58 +08:00 区别就是函数和方法的区别 |
![]() | 5 misakawaque OP @renmu123 那有没有什么比较快的速览 js 的教程或者方法啊 面向对象和函数式都有基础所以想要简便的方法去学习 |
6 Austaras 2021-03-01 22:12:47 +08:00 |
7 across 2021-03-01 22:17:39 +08:00 不太严谨的定义: js 里面没有类的概念,虽然 es6 加了 class,算是种语法糖。但 js 内置类型就有 Function,这个是 JS 语言意义上的 Function,该 Function 下可以有属性(包括 property 之类)、有方法,原型可以访问,方法可以调用。 当然,你看了会说,这 tmd 不是类和函数么? emm,设计思想不一样嘛,自动脑内转换下思路。 |
8 renmu123 2021-03-01 22:18:19 +08:00 @misakawaque #5 菜鸟教程比较基础,可以简单过一遍熟悉一下 js 的风格,然后建议过一下 es6 的教程,可以看阮一峰的一本书,之后再想看就推荐 mozilla 的 mdn 文档了。其实大概过完 es6 教程就可以去实战,遇到不懂的地方再去看 mdn 就可以了 |
![]() | 9 Kasumi20 2021-03-01 22:18:24 +08:00 一个函数对象的属性有 length,比如((a, b) => {}).length 就等于 2,还有 bind(), apply()等方法 |
10 across 2021-03-01 22:19:55 +08:00 |
![]() | 11 autoxbc 2021-03-01 22:20:37 +08:00 方法是挂在实例对象上的函数,方法在调用时会被隐式转递实例对象作为 this 参数,这也是 this 的本质,就是隐参数 |
![]() | 12 musi 2021-03-01 22:57:54 +08:00 初学者的话可以看 MDN 文档一步一步来 https://developer.mozilla.org/zh-CN/docs/learn MDN 文档算是比较权威的,所以看这里一般都没错(可能会有一些翻译不严谨问题,有能力可以直接看英文原版) 比如你会看到这一章: https://developer.mozilla.org/zh-CN/docs/Learn/Javascript/Building_blocks/Functions#%E5%87%BD%E6%95%B0%E4%B8%8E%E6%96%B9%E6%B3%95 |
13 jinliming2 2021-03-02 00:29:54 +08:00 函数和方法看你描述的是啥,他们可以是同一个东西。 比如你写了 globalThis.foo = () => {}; 。那么 foo 就是被定义在全局环境下的一个函数,可以说 foo 是一个函数,也可以说 foo 是 globalThis 下的一个方法。foo() 就是调用 foo 这个“函数”,globalThis.foo() 就是调用 globalThis 下的 foo “方法”。 虽然本质上没有区别。 当你把它叫做“函数”的时候,一般是特指它自己本身;当你把它叫做“方法”的时候,一般特指它是属于某一个父级对象下的一个 function 类型的属性。 |
![]() | 14 weixiangzhe 2021-03-02 00:56:32 +08:00 via iPhone function 和 method, 你把方式放在又个 object 的属性上 那这个函数就是 这个 object 的方法了 |
![]() | 15 devwolf 2021-03-02 08:30:52 +08:00 个人认同楼上所指出的,函数和方法是不同场景下的称谓,。<br/> 可能有点歪楼,我也有过类似的 [称谓 /定义疑问] 而整了份 demo 文在 csdn 上(知道会有人 ptsd,我只是随便找个地方)<br/> "js 中函数的四种方法以及类的三种方法" https://blog.csdn.net/qq_35306736/article/details/109180252?spm=1001.2014.3001.5501 <br/> 函数 有内部方法、实例方法(对象方法)、原型方法、静态方法(类方法)<br/> 类 有实例方法(对象方法)、原型方法、静态方法(类方法)。<br/> 不过我也是东施效颦式的从调用方法上去区分种类,肯定不入流。而且这些五花八门的叫法,个人记忆中大多来自机构视频。<br/> 更权威的定义使用当然在 mdn 里,我在本帖里晒出来自己混乱的 demo,也是希望有大佬可以再来点更站得住脚的解析 |
![]() | 16 wanguorui123 2021-03-02 08:39:07 +08:00 via iPhone ![]() 洋芋、马铃薯、土豆有什么区别 |
![]() | 17 devwolf 2021-03-02 08:43:37 +08:00 快,你想多快呀(为啥想花 3 天时间速览,js 的水也没那么浅吧。不过要用到框架的话,就跟着框架使用到的高频知识点为方向去查?) 个人认为的花费时间 :阮一峰 es6 标准入门 < 菜鸟教程 js < Javascript 高级程序设计 < MDN 。 你想更快点,那就机构视频 /慕课网这些网课视频了 |
![]() | 18 yaphets666 2021-03-02 09:11:52 +08:00 没区别.难道在其他语言里函数和方法有区别吗? |
19 gdrk 2021-03-02 09:33:24 +08:00 没区别啊,有其它语言基础的只要花点功夫理解 js 的原型链很快就能上手了。 |
![]() | 20 marcong95 2021-03-02 09:56:05 +08:00 @yaphets666 #18 Objective C 了解一下? |
![]() | 21 Hoshinokozo 2021-03-02 10:06:30 +08:00 难道不是类或者对象内的成员函数就叫方法吗? |
![]() | 22 yaphets666 2021-03-02 10:08:22 +08:00 @marcong95 和 js 是一样的 Objcet.a() 和 a()的区别的 本质上没啥区别 都是数学意义上的函数 |
23 jadeborner 2021-03-02 10:18:29 +08:00 方法是指对象中的函数,可以用 this,全局的函数在严格模式下不能用 this |
![]() | 24 marcong95 2021-03-02 10:22:40 +08:00 @yaphets666 #22 对 OC 的记忆有点模糊了,我指的是[object a]跟 object.a(),印象中好像是有点区别的。而且编程的函数一般都不是数学意义的函数把,数学意义上的函数只是一个映射而已,并没有副作用。 |
![]() | 25 chonerlee 2021-03-02 10:37:36 +08:00 我觉得楼主可以这样理解:同一个东西的两个名字,没有和任何对象关联的时候(调用:a())就叫函数,和任何对象有关联的时候(调用:obj.a())叫方法。 |
![]() | 26 anjianshi 2021-03-02 10:41:47 +08:00 我觉得函数和方法,就是“人”和“工人”的关系: - “方法”就是“函数”,当“函数”被放在某个类中时,我们会把它叫做“方法”,但其实它依然就是一个“函数”。 - “工人”是“人”,但在“工厂”这个场景下,我们把“人”称为“工人”,但他依然就是一个“人” |
![]() | 27 ubbcou 2021-03-02 11:18:32 +08:00 在《深入理解 es6 》第四章有这么以一句话: 在 ES6 之前,“方法”的概念从未被正式定义,它此前仅指对象的函数属性(而非数据属 性)。ES6 则正式做出了定义:方法是一个拥有 [[HomeObject]] 内部属性的函数,此内部 属性指向该方法所属的对象。 |
![]() | 29 dk7952638 2021-03-02 13:08:02 +08:00 严格来说,函数是不能有副作用的,而方法则不然 |
![]() | 30 WishMeLz 2021-03-02 13:52:24 +08:00 我的理解是:函数是 function,方法是 function 中有具体的业务代码逻辑。 |
![]() | 31 IvanLi127 2021-03-02 14:52:50 +08:00 函数+过程=方法。我印象中是这么个样子,然后就不太理解楼主为啥有这疑惑出,是不是有什么语言背景? |
![]() | 32 journalistFromHK 2021-03-02 15:51:33 +08:00 js 万物皆对象 字符串、数字、函数都属于对象 而对象都有属性和方法,这些属性和方法也属于对象 没必要弄清对象和方法有什么区别 因为没意义 |
33 meteor957 2021-03-02 15:52:45 +08:00 没区别 |
![]() | 34 ayase252 2021-03-02 15:58:11 +08:00 ECMA-262 定义: Function: member of the Object type that may be invoked as a subroutine Method: function that is the value of a property 方法是作为一个属性的值的函数 |
![]() | 35 libook 2021-03-02 16:49:45 +08:00 个人认为方法是面向对象的一个子概念,一个对象的方法可以对这个对象进行操作或者进行一些和这个对象有关的操作。 函数就是对输入进行处理然后输出结果的过程。 举个例子,比如“下雨”;用方法来实现就是你需要先构造一个“雨”的 Class 或构造函数,然后在其原型上加一个“下”的方法;用函数的来实现就是构造一个通用的“下”函数,然后把“雨”作为参数传进去(当然你也可以传“雪”、“冰雹”、“馅饼”)。 从 JS 内部原理来说,方法和函数主要区别在于 this,即过程执行的环境。某种程度来说,方法也是一种函数,只不过方法的运行通常是以对象数据为基础的,方法的 this 为对象本身。 没有依赖于任何对象的,可以实现独立功能的函数,就是我们一般说的“函数”。 函数式编程和面向对象编程是两种思想,JS 两种都支持(可能写法和其他语言不大一样),如何认定也取决于开发人员自己的规划。 |
36 codeDreamfy 2021-03-02 16:53:15 +08:00 看你是如何使用的吧, 如果是挂载到某个对象的属性下,那就是方法,如果是独立使用那就是函数,不同场景叫法不同而已 |