Javascript 重写prototype对象后,构造函数和prototype的值发生更改。为什么?

Javascript 重写prototype对象后,构造函数和prototype的值发生更改。为什么?,javascript,function,constructor,prototype,instances,Javascript,Function,Constructor,Prototype,Instances,我有Director()函数。我用Director()构造函数创建了两个实例AlfredH和JohnD。我没有编写原型对象 function Director(){ this.genre = "Thriller"; } var AlfredH = new Director(); var JohnD = new Director(); 如果我检查JohnD.constructor的值;和JohnD.constructor.prototype;我分别得到Director()和Objec

我有Director()函数。我用Director()构造函数创建了两个实例AlfredH和JohnD。我没有编写原型对象

function Director(){
  this.genre = "Thriller";
}

var AlfredH = new Director();
var JohnD = new Director();   
如果我检查JohnD.constructor的值;和JohnD.constructor.prototype;我分别得到Director()和Object()

但是,如果我向Director()的prototype对象添加如下属性:

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的值

var a = {
  value:22;
}
然后

你能猜出
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]
有关prototype的更多信息,请点击此处:

Director.prototype.someArray=[];
var d1=new Director();
var d2=new Director();
d1.someArray.push(22);
console.log(d2.someArray);//=[22]