获取 JavaScript 的 Array 对象中的方法列表

6
var c=$('<canvas></canvas>')[0].getContext('2d')
for(m in c){console.log(m)}

这将打印出CanvasRenderingContext2D中的方法列表。我如何对一个数组执行相同操作?我想获取"splice"、"pop"、"push"等方法。很明显,for(m in Array.prototype){console.log(m)} 是行不通的。

3个回答

14

大多数内置对象的方法和属性都被标记为不可枚举,因此它们在 for-in 循环中不会被枚举。

ECMAScript 5 提供了一个 Object.getOwnPropertyNames 方法,可以返回所有属性名称的数组,你可以这样做:

Object.getOwnPropertyNames(Array.prototype)

但是目前并非所有浏览器都支持此功能。


2

请执行以下操作:

for (m in Array) {
    console.log(m)
}

输出:

from
type
implement
extend
alias
mirror
$family
$constructor
pop
push
reverse
shift
sort
splice
unshift
concat
join
slice
indexOf
lastIndexOf
filter
forEach
every
map
some
reduce
reduceRight
each
clone
invoke
clean
associate
link
contains
append
getLast
getRandom
include
combine
erase
empty
flatten
pick
hexToRgb
rgbToHex
overloadSetter
overloadGetter
hide
protect
apply
call
attempt
pass
delay
periodical
create
bind
bindWithEvent
run

这与获取数组实例/原型上的属性不同,因为它们是不可枚举的。许多 Array.x 属性与 Array.prototype.x 属性同名只是巧合。 - bobince
你这个输出从哪里来的?在我的FF4上不起作用。Array 的唯一标准属性是 Array.isArray,而且它也是不可枚举的。 - casablanca
你可能想在那里添加一个 if (typeof m === 'function'),这样你就只会得到函数。 - Ryan Kinal
在Chrome、IE8和FF 3.6上对我不起作用。我不知道你是如何得到那个输出的。据我所测,数组构造函数没有任何属性。 - Ruan Mendes
我正在使用Chrome 9.0.597.10 dev。 - Andrew Hare
这在Chrome、IE8、Safari、FF3和Opera中对我有效。如果您使用hasOwnProperty,则应该能够分离出原型继承和数组自身的属性。http://www.jsfiddle.net/B4Nyz/ - subhaze

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接