Java脚本原型是什么类型的对象?

2022-03-30 00:00:00 javascript prototype
function Person(name) {
  this.name = name;
}
var rob = new Person('Rob');
  • Person是一个函数。
  • Person是对象。
  • 人不是人。
  • Rob是对象。
  • Rob的原型(__proto__)是Person.Prototype,所以Rob是一个人。

但是

console.log(Person.prototype);

输出

Person {}

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

如果它是对象,该原型是否也有原型?

更新我从这个问题中学到的东西(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对于确定某个对象是对象还是基元(以及它是什么类型的基元)很有用,但对于确定它是什么类型的对象无用。
  • LHS instanceof RHS如果RHS出现在原型链中的某个位置,则返回True。

解决方案

Person.Prototype是对象吗?

是的。一切都是对象:-)有关详细信息,请参阅How is almost everything in Javascript an object?。

数组?

不,绝对不是。

一个人?

视情况而定。大多数人会说这不是Person的一个例子--这是所有人的本质(他们的原型:-)。但是,console.log似乎是这样标识它的,因为它有一个指向Person构造函数的.constructor属性。

如果它是对象,该原型是否也有原型?

是的。每个物体都有一个原型。它们构建了所谓的原型链,其末端是一个null引用。在您的特定示例中,它是

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

相关文章