我是一个业余爱好程序员,我研究了几种语言,几乎总是发现“长度”是一种方法/功能。根据我的判断,我已经接受过训练,即使没有参数,任何方法调用都必须在括号后调用。
在Javascript中不是这样......为什么?
C#.length() ROR .lenth()
等...
答案 0 :(得分:11)
在Javascript中,它是属性,而不是函数。
在像C这样的语言中,长度函数必须循环遍历整个字符串以找到结束,将它作为一个函数(因为它做了一些工作)是合乎逻辑的。在将长度保持为单独值的语言中,将其作为属性(因为它只读取已存在的值)是合乎逻辑的。
答案 1 :(得分:4)
答案 2 :(得分:2)
名称length
是属性而不是函数。可以通过名称访问属性,同时必须使用()
和可能的参数调用函数以生成值。
例如
var x = {};
x.name = "example"; // Property
console.log(x.name); // Prints "example"
x.getName = function() { return "example"; } // Function
console.log(x.getName); // Doesn't print what you'd want here
console.log(x.getName()); // Prints "example"
答案 3 :(得分:1)
因为它是对象(属性)的已知值而不是需要评估的函数。
答案 4 :(得分:1)
在JavaScript中,.length
是数组的属性,而不是原型的函数。想象一下你的数组如下所示:
array {
data: [ ... ],
length: 4 // 4 elements
}
这显然是无稽之谈,但关键是.length
是数组对象的属性,而不是它的函数,所以它不需要尾随括号。
答案 5 :(得分:0)
在JavaScript中,.length
是一个属性,表现为一个:
var a = [1, 2, 3, 4, 5];
console.log(a.length); // returns 5
a.length = 3;
console.log(a.join(",")); // returns "1,2,3"
请注意,您不仅可以阅读,还可以写入属性的值。
顺便说一句,在C#中,通常.Length
或.Count
是属性,而不是方法:
String.Length
Array.Length
List<T>.Count
Linq向Count()
公开IEnumerable<T>
方法,但这是一个相对较新的补充。
答案 6 :(得分:0)
有许多语言可以通过包括JavaScript在内的方法调用来支持属性。由实现者决定如何实现它。
您可以使用功能支持自己的属性。我之前已经answered提出了类似的问题,所以不会在此重复。
Ruby在方法调用后也不会需要括号。这是有效的Ruby代码
[].size // size is an Array method
object.x = 42; // x= is a method (setter)
Python还具有功能支持属性的概念。这是Python中的一个例子:
class Foo(object):
def __init__(self):
self._x = None
@property
def x(self):
print "getter called"
return self._x
@x.setter
def x(self, value):
print "setter called"
self._x = value
f = Foo()
f.x = "20"
setter called
f.x
getter called
圆括号只是语法,传统上用于函数/方法调用,但它无论如何都不是通用标准。