我找到了一个很好的描述属性和方法之间的语义差异(通过http://www.webdeveloper.com/forum/showthread.php?133712-Properties-Vs.-Methods释义):
属性就像名词一样。他们有价值或国家。
方法就像动词一样。他们会采取行动。
属性无法执行操作,方法唯一的值是完成操作后返回的值。
e.g。
财产:门; 可能的值:打开,关闭
方法:openDoor; 操作:将门属性的值更改为“打开”
创建示例:我理解这一点,但我无法想出一个例子。是否有可能向我展示门/ openDoor在实际的Javascript代码中的外观?
答案 0 :(得分:16)
真的,您需要备份并阅读上面发布的一些链接。但作为一个简单的例子:
var house = {} ;
house.isDoorOpen = false ;
house.openDoor = function(){
house.isDoorOpen = true ;
}
这里house
是对象。它有一个属性:house.isDoorOpen
。在这里,它更像是一个形容词。门打开(真实)或关闭(假)。听起来,它描述了房子的属性。
此外,它有一个方法openDoor
(使用方式如下:house.openDoor()
)。这是它可以做的事情。在这种情况下,操作openDoor
会影响isDoorOpen
属性,使其成立。
答案 1 :(得分:1)
让我们看一下javascript规范ECMA-262如何描述术语属性
http://www.ecma-international.org/ecma-262/5.1/#sec-4.3.26
4.3.26属性
名称与作为对象一部分的值之间的关联
注意取决于属性的形式,值可能是 直接表示为数据值(原始值,a 对象或函数对象)或间接由一对存取器 功能
4.3.27方法
作为属性值的函数
注意当函数作为对象的方法调用时,对象是 传递给函数作为它的值。
另外
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,不支持属性,并要求程序员定义一个 改为使用accessor和mutator方法。"
在那个更标准,非javascript的属性定义
C#具有属性,而Java没有属性