11

我找到了对属性和方法之间语义差异的很好描述(通过http://www.webdeveloper.com/forum/showthread.php?133712-Properties-Vs.-Methods转述):

属性就像名词。它们具有价值或状态。

方法就像动词。他们执行动作。

属性不能执行操作,方法具有的唯一值是完成执行操作后返回的值。

例如

属性:门;可能的值:打开、关闭

方法:开门;行动:将门属性的值更改为“打开”

创建一个例子:我在理论上理解这一点,但我想不出一个例子。是否可以向我展示门/openDoor 在实际 Javascript 代码中的外观?

4

3 回答 3

20

确实,您需要备份并阅读上面发布的一些链接。但作为一个简单的例子:

var house = {} ;

house.isDoorOpen = false ;

house.openDoor = function(){
    house.isDoorOpen = true ;
}

house是对象。它有一个属性:house.isDoorOpen. 在这里,它更像是一个形容词。门打开(真)或关闭(假)。听起来,它描述了房子的属性。

此外,它有一个方法openDoor(使用如下:)house.openDoor()。这是它可以做的事情。在这种情况下,动作openDoor会影响isDoorOpen属性,使其成为真的。

于 2013-02-19T09:00:59.547 回答
2

让我们看看 javascript 规范 ECMA-262 是如何描述术语属性的

http://www.ecma-international.org/ecma-262/5.1/#sec-4.3.26

4.3.26 财产

名称和作为对象一部分的值之间的关联

注意根据属性的形式,值可以直接表示为数据值(原始值、对象或函数对象),也可以通过一对访问函数间接表示。

4.3.27 方法

作为属性值的函数

注意 当函数作为对象的方法被调用时,对象作为 this 值传递给函数。

Javascript 对属性的定义与 Java 不同

4.3.29 属性

定义属性某些特征的内部值


for in, 循环遍历对象的可枚举属性,包括它的函数

http://eloquentjavascript.net/1st_edition/chapter8.html

“一个函数在作为属性查找时被称为方法,并立即调用,就像在 object.method() 中一样。”

似乎确实有一个更标准的财产定义..

https://en.wikipedia.org/wiki/Property_(programming)#JavaScript

“在一些面向对象的编程语言中,属性是一种特殊的类成员,介于字段(或数据成员)和方法之间。......一些面向对象的语言,如 Java,不支持属性,并要求程序员定义一对访问器和修改器方法。”

在那个更标准的、非javascript的属性定义中

C# 有属性,Java 没有属性

于 2015-08-17T19:01:48.423 回答
0

JavaScript 中的对象只是存储在 Hash 中的键值对。b/w 属性和方法的区别在于 - 属性是存储在哈希键中的值,而方法是存储在哈希键中的函数。

于 2021-09-27T11:49:54.217 回答