为什么在Javascript中.length之后没有()
Why no () after .length in Javascript?
我是一名业余程序员,我学习过几种语言,几乎总是发现"length"是一种方法/函数。据我所知,我已经受过训练,任何方法调用都必须在后面加括号,即使没有参数。
在Javascript中并非如此。。。。为什么?
C#.length()ROR.lenth()
等等。。。
在Javascript中,它是一个属性,而不是函数。
在像C这样的语言中,长度函数必须遍历整个字符串才能找到结尾,将其作为一个函数是合乎逻辑的(因为它做了一些工作)。在长度作为单独值保存的语言中,将其作为属性是合乎逻辑的(因为它只读取已经存在的值)。
您可以在MDN上找到相关文档。
此属性返回字符串中的代码单元数。
名称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"
在JavaScript中,.length
是数组的属性,而不是原型的函数。想象一下,你的数组是这样表示的:
array {
data: [ ... ],
length: 4 // 4 elements
}
这显然是无稽之谈,但关键是.length
是数组对象的一个属性,而不是它的函数,所以它不需要后括号。
因为它是对象(属性)上的已知值,而不是需要计算的函数。
在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"
http://jsfiddle.net/GD89N/
请注意,您不仅可以读取,还可以写入属性的值。
顺便说一句,在C#中,通常.Length
或.Count
是属性,而不是方法:String.Length
Array.Length
List<T>.Count
Linq向IEnumerable<T>
公开了一个Count()
方法,但这是一个相对较新的添加。
在许多语言中,可以通过包括JavaScript在内的方法调用来支持属性。由实现者决定如何实现它。
您可以拥有由函数支持的自己的属性。我以前已经回答过类似的问题,所以这里不再赘述。
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
括号只是语法,传统上用于函数/方法调用,但无论如何,它都不是通用标准。
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 在chrome.tabs.onCreated之后加载HTML页面
- 在Jquery detachment()和appendTo()之后定位元素
- AngularJS:ng之后,重复$scope值未按预期更新
- TypeError:在不兼容的接收器nodejs上调用了方法Uint8Array.length
- 为什么元素的宽度在页面加载之后和那一刻之后不同
- Array.length似乎不起作用;console.log则显示其他情况
- 没有在Angular应用程序中定义firebase(在firebase迁移之后)
- Javascript复选框函数:;缺少:在属性id之后"
- 在刚刚调用的append函数之后,jquery.height()不会返回实际值
- 正在链接添加了以下内容::在之后
- JQuery hide()在show()之后不起作用,反之亦然
- 未执行Ajax循环的Javascript之后的代码
- 如何在`window.open`之后执行回调
- 为什么Float32Array.length的值总是3
- 如何在一个元素动画之后延迟
- 在XMLHttpRequest之后重新初始化jQuery
- <text区域>在我的html中包含event.keycode==13之后,wrap就不起作用了
- 有时 array.length 只在 .push() 之后工作(为什么?)
- 为什么在Javascript中.length之后没有()