我有Director()函数。我用Director()构造函数创建了2个AlfredH和JohnD实例。我没有写原型对象。
function Director(){
this.genre = "Thriller";
}
var AlfredH = new Director();
var JohnD = new Director();
如果我检查JohnD.constructor的值;和JohnD.constructor.prototype;我分别得到 Director()和Object()。
但是,如果我将属性添加到Director()的原型对象,如下所示:
function Director(){
this.genre = "Thriller";
}
Director.prototype = {
noir: true
};
var AlfredH = new Director();
var JohnD = new Director();
如果我检查JohnD.constructor的值;和JohnD.constructor.prototype;我分别得到 Object()和Object()。谁能解释这种行为?并且可以将其扩展为JohnD.constructor.prototype.constructor;
的值答案 0 :(得分:1)
var a = {
value:22;
}
然后
var a = {
somethingelse:0
}
你能猜出a.value
是什么吗?
您正在用另一个对象覆盖原型。
然后添加
console.log({}.constructor)===Object;//=true
也许尝试像这样添加:
Director.prototype.noir = true;
请注意,原型上的任何内容都是在实例之间共享的,这是一件好事,因为它可以节省内存并以更少的CPU更快地实例化对象。
分配新值时,会将值分配给实例,但在通过函数操作值时会影响所有实例
Director.prototype.someArray=[];
var d1=new Director();
var d2=new Director();
d1.someArray.push(22);
console.log(d2.someArray);//=[22]