证明的差异最简单的方法是通过从你的榜样的线路之一,看着我们所拥有的
function add() {
this.name = 'suresh';
this.lastname = 'kumar';
}
var b = new add();
// b.city = 'coimbatore'; // this line removed
add.city = 'coimbatore';
现在,什么是b.city
?
b.city; // undefined
没有未来的实例都会有一个城市的性质要么,所以它不是设置的只是顺序导致b
没有拥有它。
var c = new add();
c.city; // undefined
这意味着设置在构造一个属性上有构造的对象没有影响(有一些特殊的例外,如原型属性)
发生这种情况,因为add
构造函数是它自己的对象和new add
创建的对象是实例add
,所以继承自add.prototype
而不是add
本身。
如果你想每个实例继承的东西,如果他们不自己的属性它的好,那么你可以将它们添加到构造函数的原型。要小心,如果你添加对象虽然任何更改将修改为所有实例。
考虑
add.prototype.city = 'coimbatore';
b.city; // "coimbatore"
// and don't have to worry if you change it on an instance
b.city = 'fizz';
c.city; // "coimbatore"
而且危险我警告与对象
add.prototype.foo = {bar: 'baz'};
b.foo.bar; // "baz"
// but have to worry if you change it on an instance
b.foo.bar = 'fizz';
c.foo.bar; // "fizz", it got changed too :(
你问'add.city' VS'加()。现在city'? – Bergi
好吧,'add!== b'。一个是函数,另一个是对象实例。 – Bergi