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)}
是行不通的。
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)}
是行不通的。
大多数内置对象的方法和属性都被标记为不可枚举,因此它们在 for-in
循环中不会被枚举。
ECMAScript 5 提供了一个 Object.getOwnPropertyNames
方法,可以返回所有属性名称的数组,你可以这样做:
Object.getOwnPropertyNames(Array.prototype)
但是目前并非所有浏览器都支持此功能。
请执行以下操作:
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
我不知道如何使用纯JS实现它。通常我会加载underscorejs,它有一个函数可以返回对象的所有函数。
你可以查看underscorejs的代码来了解他们是如何实现的。
Array.x
属性与Array.prototype.x
属性同名只是巧合。 - bobinceArray
的唯一标准属性是Array.isArray
,而且它也是不可枚举的。 - casablancaif (typeof m === 'function')
,这样你就只会得到函数。 - Ryan KinalhasOwnProperty
,则应该能够分离出原型继承和数组自身的属性。http://www.jsfiddle.net/B4Nyz/ - subhaze