Javascript JS构造函数的prototype属性与它的区别';s原型
建造商:Javascript JS构造函数的prototype属性与它的区别';s原型,javascript,Javascript,建造商: 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
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
属性和对象.getPrototypeOf
之间有什么区别?
除了存储属性外,Function.prototype(所有函数和构造函数继承自的)prototype还能做什么
Team
是一个函数,因此它继承了function.prototype
的所有属性<代码>函数也是一个(继承自)对象
,因此它具有对象.prototype的所有属性。
但是,对象.getPrototypeOf
是对象上的一个“静态”方法,因此它不是继承的
Object.getPrototypeOf(团队)
指向与Function.prototype
相同的对象<代码>团队。getPrototypeOf未定义 问题是“为什么Team
有属性getPrototypeOf
”?问题是Team.prototype
和Team.getPrototypeOf
之间有什么区别。我想你需要console.log(Object.getPrototypeOf(Team))
查看所有函数从中继承的对象。@StevensHaenObject.getPrototypeOf()
返回实例从中主动继承的对象。函数的prototype
属性是该函数的new
实例将继承的内容。所以,var t=newteam();log(Object.getPrototypeOf(t)==Team.prototype)代码>。构造函数本身就是新函数
s,继承自Function.prototype
@StevensHaen:呃,这是因为Function.prototype=Function(){}
(出于可疑的原因,但是)。该函数对象确实具有预期的属性,如call
、apply
、bind
等。人们说JS中的函数是对象,但它们不是,因为您无法检查它们的属性。他们的例子是。为什么Team.getPrototypeOf
在我的控制台中导致未定义
?是的函数是对象<代码>(函数(){})对象的实例outuputs true。是的,你可以检查它的属性<代码>变量a=函数(){};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.prototype
Team.prototype
是一个全新的对象,大致就像您编写的Team.prototype={}
一样。