例如我有一个数组,让我们myArray
在哪里调用它:
var myArray = ['foo', 'bar'];
即使,myArray.join()
会返回'foo,bar'
,检查myArray.hasOwnProperty('join')
,也会返回false
,因为根本hasOwnProperty()
不会遍历原型链。
有没有办法通过遍历原型链来执行相同的功能?
PS:即使是自定义方法也可以。
例如我有一个数组,让我们myArray
在哪里调用它:
var myArray = ['foo', 'bar'];
即使,myArray.join()
会返回'foo,bar'
,检查myArray.hasOwnProperty('join')
,也会返回false
,因为根本hasOwnProperty()
不会遍历原型链。
有没有办法通过遍历原型链来执行相同的功能?
PS:即使是自定义方法也可以。
您可以使用in
运算符。
in 运算符为原型链中的属性返回 true。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
喜欢:
if ('join' in myArray) {
...
}
如果您想确定方法或属性是否在对象或对象的原型链中可用,您可以使用 elclanrs 引用的in运算符。
in 运算符为原型链中的属性返回 true。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
在您的示例中,您可以编写-
if ('join' in myArray) { // do something }
如果要确定原型链中属性的类型,还可以使用typeof 运算符。我找不到适用于原型运算符的“简单英语”引文,但如果您在您选择的开发工具的控制台中键入以下内容 -
var myArray = ['foo', 'bar']; typeof(myArray.join);
这将按预期返回“函数”,证明该运算符确实具有原型函数和属性 - 这也是我可以根据我的经验证明的。typeof 运算符将返回以下之一:
“未定义”、“对象”、“布尔”、“数字”、“字符串”