嘿,我是JavaScript的新手,我喜欢MyClass.class
和MyClass.methods
Ruby,在JavaScript中是否有任何等价来检查可用的对象类型和方法?
BTW typeof
操作员似乎总是回来'object'
,我不知道为什么.
在JavaScript中是否有任何等价来检查对象类型..
该typeof
运营商这样做,但它可以与它报告回混乱.
例如,typeof null
会告诉你'object'
,虽然它不是一个对象(虽然这个行为是定义的).
typeof 'a'
会告诉你'string'
,但typeof new String('a')
会告诉你一个'object'
.
typeof
运算符的另一个优点是,ReferenceError
如果尚未声明其操作数,它将不会抛出.
下面用于确定函数的方法可以适用于报告正确的类型(尽管typeof
通常对于基元来说足够).
......和方法可用吗?
您可以使用for ( in )
循环查看对象上的所有属性.
for (var prop in obj) {
console.log(prop);
}
Run Code Online (Sandbox Code Playgroud)
这将显示所有可枚举的属性,包括继承/委托的属性.要忽略继承的属性,请将其添加到循环体中...
if ( ! obj.hasOwnProperty(prop)) {
continue;
}
Run Code Online (Sandbox Code Playgroud)
要查看方法(分配了函数的属性),您可以执行此操作...
for (var prop in obj) {
if (!obj.hasOwnProperty(prop) || Object.prototype.toString.call(obj[prop]) != '[object Function]') {
continue;
}
console.log(prop, obj[prop]);
}
Run Code Online (Sandbox Code Playgroud)
如果不是在多window
环境中(即不是iframe
s),你可以简单地使用......
for (var prop in obj) {
if (!obj.hasOwnProperty(prop) || ! (obj[prop] instanceof Function)) {
continue;
}
console.log(prop, obj[prop]);
}
Run Code Online (Sandbox Code Playgroud)
...要么...
for (var prop in obj) {
if (!obj.hasOwnProperty(prop) || obj[prop].constructor != Function) {
continue;
}
console.log(prop, obj[prop]);
}
Run Code Online (Sandbox Code Playgroud)
如果您只关心实现的方法[[Call]]
(即可以作为函数调用),例如RegExp
较旧的Safaris中的对象,您可以简单地确定可以调用的内容typeof fn == 'function'
.
既然你提到了Ruby,你可能会完全疯狂并实现Ruby class
(或足够接近)并methods
通过扩充Object.prototype
,但请不要.:)
我还在typeof
JavaScript中有关于运算符的深入文章.
归档时间: |
|
查看次数: |
430 次 |
最近记录: |