匿名和命名函数的第二个原型

时间:2013-03-16 07:21:25

标签: javascript prototypal-inheritance

请有人解释为什么b.prototype.prototype undefined(不是“Object {}”)?

a = function(){}
function b(){}

console.log(a.prototype)                        //Object {} 
console.log(b.prototype)                        //b {}
console.log(a.prototype.prototype)              //undefined 
console.log(b.prototype.prototype)              //undefined

a>对象{}> undefined - 好的

b> b {}> ???

3 个答案:

答案 0 :(得分:1)

主要是,您似乎对b的原型似乎再次b这一事实感到困惑 - 它不是。两个原型都是对象,因此没有自己的原型。 " toString()"的实现构造原型的方法(或者您用来显示此对象的特定控制台)只是特定于实现的,在这种情况下,它在输出中包含函数名称(如果有的话)。您可能会在其他浏览器中获得不同的输出,例如IE。

答案 1 :(得分:0)

未定义,因为您尚未为属性prototype分配任何内容。

a.prototype.prototype=a.prototype;
console.log(a.prototype.prototype)//{}

答案 2 :(得分:0)

为什么要定义b.prototype.prototype

var a = function () {};

a.prototype; // {}

function b () {}

b.prototype; // {}

两种原型都没有称为原型的属性......
因此,要求对象的非现有属性会导致undefined

控制台正在调用b.prototype "b{}"这一事实并未改变任何内容。它只是说它是named-funciton b的原型对象,而不是匿名函数,就像分配给a的函数一样。

它仍然是一个空物体,没有原型。