gpt4 book ai didi

javascript - 如何在 Javascript 中检查此对象可用的对象和方法

转载 作者:行者123 更新时间:2023-11-29 09:58:41 24 4
gpt4 key购买 nike

嘿,我是 JavaScript 的新手,我喜欢 Ruby 中的 MyClass.classMyClass.methods,JavaScript 中是否有任何等价物来检查对象类型和可用的方法?

顺便说一句,typeof 运算符似乎总是返回 'object',我不知道为什么。

最佳答案

Are there any equivalence in JavaScript to check out the object type..

typeof 运算符会执行此操作,但它可能会与其报告的内容混淆。

例如,typeof null 会告诉您 'object',尽管它不是一个对象(尽管定义了此行为)。

typeof 'a' 会告诉你 'string',但是 typeof new String('a') 会告诉你一个 “对象”

typeof 运算符的另一个优点是,如果其操作数尚未声明,它不会抛出 ReferenceError

可以调整下面用于确定函数的方法来报告正确的类型(尽管 typeof 通常对于基元来说已经足够了)。

...and methods available?

您可以使用 for ( in ) 循环查看对象的所有属性。

for (var prop in obj) {
console.log(prop);
}

这将显示所有可枚举的属性,包括继承/委托(delegate)的属性。要忽略继承的属性,请将其添加到循环体中...

if ( ! obj.hasOwnProperty(prop)) {
continue;
}

要查看方法(分配函数的属性),您可以这样做...

for (var prop in obj) {
if (!obj.hasOwnProperty(prop) || Object.prototype.toString.call(obj[prop]) != '[object Function]') {
continue;
}
console.log(prop, obj[prop]);
}

jsFiddle .

如果不是在多窗口环境中(即不是iframe),你可以简单地使用...

for (var prop in obj) {
if (!obj.hasOwnProperty(prop) || ! (obj[prop] instanceof Function)) {
continue;
}
console.log(prop, obj[prop]);
}

jsFiddle .

……或者……

for (var prop in obj) {
if (!obj.hasOwnProperty(prop) || obj[prop].constructor != Function) {
continue;
}
console.log(prop, obj[prop]);
}

jsFiddle .

如果您只关心实现[[Call]] 的方法(即可以作为函数调用),例如RegExp objects in older Safaris ,您可以使用 typeof fn == 'function' 简单地确定可调用的内容。

既然你提到了 Ruby,你可能会完全疯狂并通过扩充 Object.prototype 来实现 Ruby 的 class(或足够接近)和 methods ,但请不要。 :)

我还有一篇关于 typeof operator in JavaScript 的深入文章.

关于javascript - 如何在 Javascript 中检查此对象可用的对象和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6302005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com