主要区别在于它p
是一个对象,它是Person
while的一个实例,它p2
是一个“普通”对象,它只是一个Object
.
这种差异何时重要?
1)访问原型属性:
var Person = function(name) { this.Name=name; }
Person.prototype.getName = function () {
return this.Name;
};
p.getName() //works fine
p2.getName() //Error since getName is not defined
或者:
console.log(p.constructor) //Person
console.log(p2.constructor) //Object
2)使用instanceof
运算符:
p instanceof Person //true
p2 instanceof Person //false
3)与继承有关的一切
这三个点基本上都可以追溯到原型链,这两种方式看起来都是这样的:
p --> Person --> Object
p2 --> Object
现在,既然你有这个构造函数,我建议你总是使用它,因为如果你将Person
对象与普通对象混合,它会变得非常混乱。如果您真的只想要一个具有Name
属性的对象,那么两种方式都可以,但是一旦它变得更复杂一点,您就会遇到严重的问题。