Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript原型是什么类型的对象? 人是一种功能 人是一个物体 人不是人 罗布是一个目标 rob的原型是Person.prototype,所以rob是一个人_Javascript_Prototype - Fatal编程技术网

Javascript原型是什么类型的对象? 人是一种功能 人是一个物体 人不是人 罗布是一个目标 rob的原型是Person.prototype,所以rob是一个人

Javascript原型是什么类型的对象? 人是一种功能 人是一个物体 人不是人 罗布是一个目标 rob的原型是Person.prototype,所以rob是一个人,javascript,prototype,Javascript,Prototype,但是 输出 console.log(Person.prototype); Person.prototype是对象吗?阵列?一个人 如果它是一个对象,那么这个原型也有原型吗 更新我从这个问题中学到的知识(2014年1月24日星期五上午11:38:26) 原型只是简单的对象 typeof用于确定某个对象是对象还是基本体(以及它是什么类型的基本体),但用于确定它是什么类型的对象是无用的 LHS instanceof RHS如果RHS.prototype出现在LHS原型链的某个位置,则返回true

但是

输出

console.log(Person.prototype);
Person.prototype是对象吗?阵列?一个人

如果它是一个对象,那么这个原型也有原型吗

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

  • 原型只是简单的对象
  • typeof用于确定某个对象是对象还是基本体(以及它是什么类型的基本体),但用于确定它是什么类型的对象是无用的
  • LHS instanceof RHS如果RHS.prototype出现在LHS原型链的某个位置,则返回true
Person.prototype是对象吗

对。一切(有趣的)都是一个对象:-)有关详细信息,请参阅

阵列

不,绝对不是

一个人

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

如果它是一个对象,那么这个原型也有原型吗

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

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

我猜一切都是JS中的对象@苏迪尔:
42
@zerkms-true,漏掉了其中的“几乎”一词:)
Person.prototype
是从object.prototype继承的对象<代码>Person.prototype对象实例;//正确<代码>Person.prototype.\uuuu proto\uuuu===Object.prototype;//true
typeof null==“object”
typeof window==“object”
您还没有真正开始回答所问的问题。好吧,这是一件有趣的事情。将此应用于我的简单代码,
(typeof rob==“Person”)
为false,所以函数实际上不定义新类型
rob
只是一个对象,其原型(
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
)是
人。原型
?@Robert Mark Bram:
(rob instanceof Person)
。“所以函数实际上并不定义新的类型”-nope-1。您已经成功地混淆了OP:-)@Robert:没有引入新的
typeof
-类型(对于非基本类型,只有
对象
函数
),是的。他们可能会通过原型链引入
instanceof
-“类型层次结构”,是的,但是使用原型链的东西仍然是普通对象。好的,我想我现在有了更好的理解。Javascript“typeof”类型只是对象、函数和原语(未定义、null、number、string、boolean)。然而,如果RHS出现在LHS的原型链中,instanceof将返回true-这表明rob是人和对象,而Person是函数和对象,Person.prototype是对象。我真的很喜欢这两个答案-谢谢@Sandu。这两件事都让我深思熟虑,我很感激。这个答案是我的首选——链条的视觉表现帮助很大!
Person {}
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 Person === "function"
typeof Person.prototype === "object"
      rob
       |
       v
 Person.prototype
       |
       v
 Object.prototype
       |
       v
      null