如果我有一个名为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的原型,但是,当我尝试执行Person.__proto__时,它指向function(),而Person.constructor指向Function()。
有人能解释一下function()和Function()之间的区别吗?为什么Function()类的原型是function()
发布于 2010-05-21 03:42:36
有人能解释一下function()和Function()之间的区别吗?为什么Function()类的原型是function()?
__proto__是一个暴露[原型]的实现细节。[prototype]和构造器不需要(通常不是)同一件事。不管怎样..。
考虑这个假设:,它是一个impl。依赖于引擎函数的细节--在特定的引擎测试中(FF,哪个版本?),是一个对象,它本身就有一个[原型]的函数。function是原始的function-object。Person.prototype (默认情况下)的类型是function (原始的function-object),断言是这种明显的二分法的结果。(JS有一些怪癖:new Number(0)与0不同。)
然而,在IE(8)中情况并非如此。在IE中,默认的原型是一个“纯对象”,而不是一个函数对象。
发布于 2010-05-20 18:04:07
在定义这样的函数时:
var Person = function (fname, lname){
this.fname = fname;
this.lname = lname;
}这将使Person成为一个函数。函数是一个对象,它需要像任何其他“第一类”对象一样构造,所以它有一个构造函数:所有函数对象的构造函数,称为Function。
所有函数的原型似乎都是一个名为function的对象。
我喜欢参考一个很好的explanation by Mike Koss,它让我学到了很多。
https://stackoverflow.com/questions/2872257
复制相似问题