我想了解原型和构造函数如何在JavaScript中工作,并遇到这种情况。如何创建对象?
我总是想象的对象是怎么在JavaScript创建由
- 一个空的对象被创建
- 的对象链接到该函数的原型
- 对象搜索一个构造函数
- 此构造函数已运行且属性已分配给该对象
- 该对象由隐式返回
return this
这种理解方式似乎不能解释obj2
和obj3
。
例如,我明确将Foo.prototype.constructor
设置为obj2
的其他值,但obj2
仍具有属性bar
。比方说,bar
存储在Foo的原型,这可以解释为什么obj2
拥有财产bar
为什么被Object
创建obj3
,但如果我创建一对夫妇更obj2
S,这将意味着他们对Foo原型共享相同的变量bar
和我认为情况并非如此。
有人能给出一个更合理的解释,为什么obj2
和obj3
是这样的?
function Foo(){
this.bar = true;
}
console.log('obj1');
var obj1 = new Foo();
console.log(obj1);
console.log(obj1.constructor === Foo);
console.log('obj2');
Foo.prototype.constructor = 3; //a dummy value
var obj2 = new Foo();
console.log(obj2);
console.log(obj2.constructor === Foo);
function Bar(){
this.foo = true;
}
console.log('obj3');
Bar.prototype = 3;
var obj3 = new Bar();
console.log(obj3);
console.log(obj3.constructor === Bar);
console.log(obj3.constructor === Object);
http://stackoverflow.com/questions/572897/how-does-javascript-prototype-work – Abhitalks
JavaScript对象本质上是包含属性变量(内容或以其他方式) - 这些属性可以是方法,或者只是值。原型(Object.prototype.prototype)修改这些属性。 – Crowes
@Abhitalks如果你确实看过我说过的话,你就会知道我已经明白你的链接在说什么了。第二个要点我已经在谈论链接'__proto__',我只是没有明确地写'__proto__'或'[[Prototype]]'。 – kevguy