【问题标题】:Difference between the prototype property of a JS constructor and it's prototype [duplicate]JS构造函数的原型属性与其原型之间的区别[重复]
【发布时间】:2015-05-15 06:15:18
【问题描述】:

构造函数:

function Team (type) {
  this.type = type;
}

//this will output this empty object inherited from Object.property
console.log(Team.prototype);
-> Team {}

//this one outputs nothing in my console
console.log(Object.getPrototypeOf(Team));
//is it inheriting from this one, the one for all functions?
-> Function.prototype //??

.prototype 属性和Object.getPrototypeOf 有什么区别? 除了存储属性之外,Function.prototype(所有函数和构造函数都继承自)原型还有什么作用?

【问题讨论】:

  • 问题是“为什么Team 有一个属性getPrototypeOf”?
  • 问题是Team.prototypeTeam.getPrototypeOf有什么区别。
  • 我想您希望console.log(Object.getPrototypeOf(Team)) 查看所有函数继承自的对象。
  • @StevensHaen Object.getPrototypeOf() 返回实例主动继承的对象。函数的 prototype 属性是该函数的 new 实例将继承的内容。所以,var t = new Team(); console.log(Object.getPrototypeOf(t) === Team.prototype);。构造函数本身就是new Functions,继承自Function.prototype
  • @StevensHaen:嗯,那是因为Function.prototype = function(){}(出于可疑的原因,但it's what the spec says)。该函数对象确实具有 callapplybind 等预期属性。

标签: javascript


【解决方案1】:

Team 是一个函数,所以它继承了Function.prototype 的所有属性。 Function 也是一个(继承自)object,因此它具有 Object.prototype. 的所有属性但是,Object.getPrototypeOf 是 Object 上的“静态”方法,因此它不是继承的。

Object.getPrototypeOf(Team) 指向与Function.prototype 相同的对象。 Team.getPrototypeOf 未定义。

【讨论】:

  • 人们说 JS 中的函数是对象,但它们不是,因为你无法检查它们的属性。他们的例子是。为什么Team.getPrototypeOf 在我的控制台中导致undefined
  • 是的,函数就是对象。 (function(){}) instanceof Object 输出为真。是的,你可以检查它的属性。 var a = function(){}; a.b = 1; console.log(a.b) 输出 1. 你需要澄清你的问题。
  • 例如,您不能直接从函数访问属性(function Team (type) {this.type = type;}Team.type() 不起作用),而是它的一个实例 -(var team = Team();team.type() 起作用) .
  • 你的最后一句话可能是指Object.getPrototypeOf(Team) == Function.prototype
  • Team.prototype !== Function.prototypeTeam.prototype 是全新的 Object,大致就像你写的 Team.prototype = {}
猜你喜欢
  • 1970-01-01
  • 2013-01-26
  • 1970-01-01
  • 2014-01-05
  • 2016-01-07
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多