在编写原型对象之后,构造函数和原型的值会发生变化。为什么?

时间:2013-10-01 06:50:29

标签: javascript function constructor prototype instances

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

的值

1 个答案:

答案 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]

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