什么类型的对象是Javascript原型?

时间:2014-01-23 04:31:42

标签: javascript prototype

function Person(name) {
  this.name = name;
}
var rob = new Person('Rob');
  • 人是一种功能。
  • 人是一个对象。
  • 人不是人。
  • rob是一个对象。
  • rob的原型(__proto__)是Person.prototype,因此rob是一个人。

但是

console.log(Person.prototype);

输出

Person {}

Person.prototype是一个对象吗?阵列?一个人?

如果它是一个Object,该原型是否也有原型?

更新我从这个问题中学到的知识(2014年1月24日,星期五,上午11:38:26)

function Person(name) {
  this.name = name;
}
var rob = new Person('Rob');

// Person.prototype references the object that will be the actual prototype (x.__proto__)
// for any object created using "x = new Person()". The same goes for Object. This is what
// Person and Object's prototype looks like.
console.log(Person.prototype); // Person {}
console.log(Object.prototype); // Object {}
console.log(rob.__proto__); // Person {}
console.log(rob.__proto__.__proto__); // Object {}

console.log(typeof rob); // object
console.log(rob instanceof Person); // true, because rob.__proto__ == Person.prototype
console.log(rob instanceof Object); // true, because rob.__proto__.__proto__ == Object.prototype

console.log(typeof rob.__proto__); // object
console.log(rob.__proto__ instanceof Person); // false
console.log(rob.__proto__ instanceof Object); // true, because rob.__proto__.__proto__ == Object.prototype
  • 原型只是普通物体。
  • typeof可用于确定某些东西是对象还是原始的(以及它是什么类型的原语),但无法确定它是什么类型的对象。
  • 如果RHS.prototype在LHS原型链的某处出现,则LHS实例RHS 返回true。

2 个答案:

答案 0 :(得分:4)

  

Person.prototype是一个对象吗?

是。一切 (有趣) 是一个对象:-)详见How is almost everything in Javascript an object?

  

数组?

不,绝对不是。

  

一个人?

取决于。大多数人会说它不是Person的实例 - 它是所有人的本质(他们的原型:-)。但是,console.log似乎可以识别它,因为它具有指向.constructor构造函数的Person属性。

  

如果它是一个Object,该原型是否也有原型?

是。每个对象都有一个原型。这些构建了所谓的原型链,其末尾是null引用。在您的特定示例中,它是

      rob
       |
       v
 Person.prototype
       |
       v
 Object.prototype
       |
       v
      null

答案 1 :(得分:-1)

typeof Person === "function"
typeof Person.prototype === "object"