在JavaScript中确定对象类的最佳方法是什么。如果我必须确定一个对象的类别,我可以这样做......
function findClass(o){
return Object.prototype.toString.call(o).slice(8,-1);
}
但是当我们有自定义类时,这种方法并没有帮助。
答案 0 :(得分:0)
你无法像在Java中那样轻松地找到对象的类。这是因为Javascript是一种基于原型的语言,但是你仍然有一些确定类的方法:
示例:
function Foo() {}
var foo = new Foo();
typeof Foo; // == "function"
typeof foo; // == "object"
foo instanceof Foo; // == true
foo.constructor; // == Foo
Foo.prototype.isPrototypeOf(foo); // == true
答案 1 :(得分:0)
如果两个对象都继承自,那么它们属于同一个类 相同的原型对象。
在处理自定义类时,为了使类检查的有效方法(如上所述,Ivan Grgurevic),显式设置构造函数并告知哪些属于该类型是非常重要的。
示例:
// Class constructor
function CustomClass(type) {
// CODE
}
// prototype, all CustomClass objects inherit form this object
Sedcard.prototype = {
constructor: CustomClass, // explicit set constructor, backwards reference
// Class method
};
现在你可以安全地使用支票,例如:typeof,instanceof和direct,如Foo.prototype.isPrototypeOf(foo)
尽管如此,这是关于JS的一个非常难的主题,并建议你进一步讲课,比如JS书“Javascript,权威指南”http://shop.oreilly.com/product/9780596805531.do,以便深入理解它的工作方式。
关于这个话题的更多信息:
r instanceof CustomClass:instanceof运算符实际上并不检查r是否为 由构造函数初始化。它检查它是否继承自它 原型。然而,语法的实例强化了使用 构造函数作为一个类的公共身份。
如果o继承,则表达式o instanceof c的计算结果为true c.prototype。继承不一定是直接的。如果o继承自 从继承自c.prototype的对象继承的对象, 表达式仍将评估为真。
这两个引用都来自我推荐的上一本书。