在<Grid>
<Grid.Resources>
<FrameworkElement x:Key="ProxyElement" DataContext="{Binding}"/>
</Grid.Resources>
<ContentControl Visibility="Collapsed" Content="{StaticResource ProxyElement}"></ContentControl>
<DataGrid x:Name="datagrid" Grid.Row="1" AutoGenerateColumns="False" ItemsSource="{Binding Alvm.Artists}">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" IsReadOnly="True" Binding="{Binding Id}" />
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="Email" Binding="{Binding Email}" />
<DataGridComboBoxColumn Header="Category" SelectedItemBinding="{Binding Category}"
ItemsSource="{Binding DataContext.Clvm.Categories, Source={StaticResource ProxyElement}}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
类型对象中,float: left;
属性表示function
类型对象所期望的参数数。例如,以下可视化中的length
对象function
对象中的length
字段的值为Function
。
在上面的可视化中,Array
字段也是1
类型对象length
的成员,其值为object
。
MDN说:
Array.prototype
反映了数组中元素的数量。
在以下0
&amp; Array.prototype.length
数组,
cars
bikes
&amp; var cars = new Array("Saab", "Volvo", "BMW");
var bikes = ["Honda", "Yamaha"];
仍为cars.__proto__.length
。
多个数组对象(bikes.__proto__.length
,0
)无法共享cars
属性值,而bikes
属性位于length
。
1)
根据MDN,这是正确的定义吗?
2)
如果不是,length
中的Array.prototype
字段表示什么?
答案 0 :(得分:3)
var cars = new Array("Saab", "Volvo", "BMW"); var bikes = ["Honda", "Yamaha"];
cars.__proto__.length
&amp;bikes.__proto__.length
仍为0。
是的,但cars.length === 3
和bikes.length === 2
。
cars.__proto__.length
是prototype
构造函数的Array
属性的长度。默认情况下,这是一个空数组实例。
<强>详情
Array.prototype
是一个空数组实例。
var cars = new Array()
会生成__proto__
指向Array.prototype
的对象。
所以cars.__proto__ === Array.prototype
。
在数组实例上,length
是Array对象上最大整数属性的值加1。如果它是空的,则为零。
var a = [];
a[10] = 'foo';
a.length; // 11
Array.prototype
为空。
因此
cars.__proto__.length === 0
答案 1 :(得分:1)
MDN说:
Array.prototype.length
反映了数组中元素的数量。这是一个正确的定义吗?
Sorta,是的。与数组相关的属性有三种.length
:
Array.length
。正如你所说,它是所有函数所拥有的实例(“自己的”)属性,并且与数组无关。arr.length
,其中arr
是数组实例(例如arr = ['ex', 'ample']
)。每个数组都有special property,它有点像getter / setter,自动确定对象具有的最高数组索引属性。Array.prototype.length
是#2的一个特例,因为Array.prototype
只是一个数组对象本身 - 默认为空,因此.length == 0
。 MDN有点不准确,因为它将实例属性与文档页面中从原型继承的属性混合在一起。由于您的图表可以正确显示,所有cars
,bikes
和Array.prototype
对象都有自己的.length
属性,并且具有自己的值(并且更改一个不会更改其他当然)。
那么Array.prototype.length
的目的是什么?实际上并不多,因为它通常被继承自Array.prototype
的数组对象的自有属性所掩盖。因此除了存在之外,因为规范说Array.prototype
是一个数组实例并且具有该属性,它还可以作为 normal 上合理的默认.length
值(从Array.prototype
继承的非数组对象 - 但这些情况非常罕见。