【问题标题】:JavaScript: 'typeof' operator does not return correct classtypeJavaScript:“typeof”运算符不返回正确的类类型
【发布时间】:2015-06-18 14:35:42
【问题描述】:

我可能犯了一个巨大的错误。目前我正在尝试声明两个类,如下所示。但在这两种情况下,“typeof”都返回“object”。在 JavaScript 中声明一个类的正确过程是什么,这样我们就可以通过 'typeof' 运算符获得正确的类名。

var Furniture = function(legs){
  this.legs = legs;
};
Furniture.prototype.getLegs = function(){ return this.legs; };

var Chair = function(){
  Furniture.call(this, 4);
};
Chair.prototype = Object.create(Furniture.prototype);


var a = new Furniture(12);

var b = new Chair();

console.log(typeof a);
console.log(typeof b);

提前致谢。

【问题讨论】:

  • typeof 不返回类名,而是返回类型名。如果要提取家具或椅子,请使用 instanceof。
  • 见这个:stackoverflow.com/q/332422/1207195。例如:a.constructor.nameb.constructor.name
  • 我不知道,为什么这个问题被否决了。我可能不知道 JavaScript 的复杂概念。那么,我不能向社区提出这个问题吗?我认为这很侮辱人。

标签: javascript class oop inheritance typeof


【解决方案1】:

这对你有用

    var toType = function(obj) {
        return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
   }

var b = new Chair();

console.log(toType(b));  // Chair

访问这里
typeOf Does not return correct class type

【讨论】:

  • 这仍然为我返回“对象”。它应该做什么?
【解决方案2】:

这是正确的行为。 Mozilla developer network 有一个有用的表格,其中包含 typeof 运算符的结果描述:

我认为稍微了解一下js会非常有用。 Javascript 看起来像简单的语言。这不是真的。这是一个棘手的问题。

【讨论】:

    【解决方案3】:

    您必须检查instanceof 而不是typeof

    typeof 只会给你对象的数据类型。

    console.log(a instanceof Furniture);
    console.log(b instanceof Chair);
    

    请参考 How do I get the name of an object's type in JavaScript? 上面的 SO 展示了各种查找构造函数名称的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 2015-01-29
      • 1970-01-01
      相关资源
      最近更新 更多