【发布时间】:2011-05-24 15:40:21
【问题描述】:
我在 javascript 中有一个简单的类:
function foo() {
this.bar = "bar";
}
var test = new foo;
console.log(foo.prototype,foo.__proto__)
/*output: foo {
constructor: function foo() {
__proto__: Object
}
,
function Empty() {}
*/
console.log(test,test.prototype,test.__proto__,test.__proto__.__proto__)
/*output: foo {
bar: "bar"
__proto__: foo
}
,
undefined
,
foo {
constructor: function foo() {
__proto__: Object
}
,
Object {
...
}
*/
我不明白的:
在第一个日志中,foo.prototype 具有 __proto__ 属性,这是一个 Object
在第二个日志中,test.__proto__ 具有 __proto__ 属性,这是一个 Object
什么时候用__proto__,什么时候用prototype,有什么区别?
更新:
在 instanceOf 部分的 John Resig's blog 中有一些我不明白的地方:
如果我使用 var asd = "asd";Object.getPrototypeOf(asd) 它会抛出 TypeError 但是
如果我使用var dsa = new String("dsa");Object.getPrototypeOf(dsa) 它返回String
但是 asd.constructor.prototype == dsa.constructor.prototype 是true
为什么Object.getPrototypeOf(asd) 会抛出错误?这是一个字符串,不是吗?
【问题讨论】:
标签: javascript prototype-programming