【问题标题】:Why does combination constructor/prototype pattern return typeof being object?为什么组合构造函数/原型模式返回 typeof 是对象?
【发布时间】:2011-07-04 19:22:50
【问题描述】:

我很难理解为什么 typeof 在使用此构造函数/原型模式时不会在 MyObject 的实例上返回 MyObject - 它在 MyObject 的原型之后使用 MyObject 构造函数返回由 new 创建的实例上的对象有将它的构造函数设置为 MyObject - 有人可以解释为什么吗?

function MyObject(foo, bar) {
  this.foo = foo;
  this.bar = bar;
}

MyObject.prototype = {
  constructor: MyObject,
  someFunc: function() {
    console.log(foo + " and " + bar);
  }  
}

var newObject = new MyObject("a", "b");
typeof newObject;

【问题讨论】:

    标签: javascript object prototype-programming


    【解决方案1】:

    如果要检查,请使用 instanceof 运算符:newObject instanceof MyObject;(返回 true)

    有关 typeof 为何如此行为的更多信息:http://javascript.crockford.com/remedial.html

    【讨论】:

    • 请注意,除非您知道对象是如何构造的,否则 instanceOf 信息量不大。它只是检查 MyObject.prototype 是否在 newObject 的 [[Prototype]] 链上。
    【解决方案2】:

    【讨论】:

    • 您如何解释typeofFunction 实例返回function
    • 呃,我是否混淆了使用 instanceof 和 typeof?
    • 函数也是对象,只是特殊的函数对象。更多在这里:developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…(抱歉刚刚发布链接,今晚有点懒)
    • @Andreas Jansson,很明显。我只是指出不一致之处。例如,typeof [] 将返回 object,而不是 array
    • @katspaugh - 这就是 typeof 被指定为行为的方式。它将为实现内部 [[call]] 方法的任何本机对象返回 function
    猜你喜欢
    • 2015-01-18
    • 2013-07-03
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2017-03-07
    相关资源
    最近更新 更多