var foo = function(){alert('foo')}
function bar(){alert('bar')}
Run Code Online (Sandbox Code Playgroud)
为什么foo.prototype
指向Object,但命名函数bar.prototype
指向自身?
我应该补充一点,从浏览器控制台可以看到这种行为.
如果您使用控制台(如Chrome)来记录prototype
对象的值,那么我建议您不要这样做.与其他浏览器控制台一样,Chrome控制台会格式化原型对象的输出.
因此,对于命名函数,它将记录name
函数,但对于未命名的函数,它将只记录Object
.这并不意味着prototype
函数指向Object
函数本身.这就是控制台向你展示的内容(有人应该为此起诉).亲眼看看:http://jsfiddle.net/2xkpC/
它是如何知道函数的名称的prototype
呢?好吧,函数的原型有一个叫做constructor
函数本身的属性,函数的名称作为字符串存储name
在函数调用的属性中.因此,如果您记录一个prototype
对象,那么它将显示prototype.constructor.name || "Object"
:
var foo = function(){alert('foo')}
console.log(foo.prototype); // logs "Object"
function bar(){alert('bar')}
console.log(bar.prototype); // logs bar.prototype.constructor.name
Run Code Online (Sandbox Code Playgroud)
请参阅此处的演示:http://jsfiddle.net/4bWfn/
如果打开控制台并单击记录输出附近的那个三角形,那么您将看到原型对象constructor
的__proto__
属性和属性.在constructor
你的下方也会看到这个name
属性.
要了解有关JavaScript继承的更多信息,请prototype
阅读以下对象:https://stackoverflow.com/a/8096017/783743
归档时间: |
|
查看次数: |
614 次 |
最近记录: |