在javascript中确定对象的类

时间:2014-07-18 10:11:24

标签: javascript jquery

在JavaScript中确定对象类的最佳方法是什么。如果我必须确定一个对象的类别,我可以这样做......

function findClass(o){
         return Object.prototype.toString.call(o).slice(8,-1);
}

但是当我们有自定义类时,这种方法并没有帮助。

2 个答案:

答案 0 :(得分:0)

你无法像在Java中那样轻松地找到对象的类。这是因为Javascript是一种基于原型的语言,但是你仍然有一些确定类的方法:

  • typeof运算
  • 的instanceof
  • obj.constructor
  • proto.isPrototypeOf

示例:

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的对象继承的对象,   表达式仍将评估为真。

这两个引用都来自我推荐的上一本书。