如果我有一个名为Person的课程。
var Person = function(fname, lname){
this.fname = fname;
this.lname = lname;
}
Person.prototype.mname = "Test";
var p = new Person('Alice','Bob');
现在,p.__proto__
指的是人的原型,但是,当我尝试Person.__proto__
时,它指向function()
,Person.constructor
指向Function()
有人可以解释function()
和Function()
之间的区别以及为什么Function()
类的原型是function()
?
答案 0 :(得分:2)
有人可以解释一下function()和Function()之间的区别是什么以及为什么Function()类的原型是一个函数()?
__proto__
是一个暴露[[prototype]]的实现细节。 [[prototype]]和构造函数不需要(通常不是)相同的东西。总之...
考虑这个假设:这是一个impl。依赖于引擎的细节 - 并且在测试的特定引擎中(FF,哪个版本?),Function是一个本身具有[[prototype]]函数的对象。 function是原始的function-object。 Person.prototype是(默认情况下)类型函数(原始函数 - 对象)和由于这种明显的二分法而声明的断言。 (JS有一些怪癖:new Number(0)
与0
不同。)
然而,在IE(8)中并非如此。在IE中,默认原型是“普通对象”,而不是函数对象。
答案 1 :(得分:1)
定义这样的函数时:
var Person = function (fname, lname){
this.fname = fname;
this.lname = lname;
}
这将使Person
成为一个功能。函数是一个对象,需要像任何其他“第一类”对象一样构造,因此它有一个构造函数:所有函数对象的构造函数,称为Function
。
所有函数的原型似乎都是一个名为function
的对象。
我想引用一个很了解我的好explanation by Mike Koss。