0

我有 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 的值;

4

1 回答 1

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]

有关原型的更多信息:https ://stackoverflow.com/a/16063711/1641941

于 2013-10-01T17:13:35.227 回答