对不起,如果我错过了一些东西,但是当我尝试使用call方法作为回调时,它会在Chrome和Node.js中给出奇怪的错误。
[' foo', ' bar '].map(String.prototype.trim.call);
TypeError: [" foo", " bar "].map is not a function
at Array.map (native)
但这些片段有效:
[' foo', ' bar '].map(function (item) {
return String.prototype.trim.call(item);
}); // => ['foo', 'bar']
/*
and ES2015
*/
[' foo', ' bar '].map(function () {
return String.prototype.trim.call(...arguments);
}); // => ['foo', 'bar']
我还检查了call
函数的类型:
typeof String.prototype.trim.call; // => 'function'
我做错了吗?谁能解释一下为什么我会收到这样的错误?感谢。
答案 0 :(得分:0)
解决问题的最简单方法就是写出来:
<Grid>
<Grid.ColumnDefinitions>
...
<ColumnDefinition Width="..." x:Name="cbColumn" />
</Grid.ColumnDefinitions>
<ComboBox>
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock TextWrapping="Wrap" Width="{Binding ActualWidth, ElementName=cbColumn}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</Grid>
如果你想传递一个函数,你将需要一些比你想要的更复杂的东西,按照
的方式[' foo', ' bar '].map(s => s.trim());
或者如果您愿意
.map(Function.call.bind(String.prototype.trim))
This question可能会回答您的所有问题。