p和p2对象之间的实际区别是什么:
var Person = function(name) { this.Name=name; } var p = new Person("John"); var p2 = JSON.parse('{"Name":"John"}');
当我更好地创建新的Person()并从解析的JSON复制值,而不是使用解析的JSON对象,因为我会使用Person的实例时,会出现什么情况?
PS.假设我从WebSocket获取了JSON字符串,无论如何我将不得不解析它.
解决方法
主要区别在于p是一个对象,它是Person的一个实例,而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属性的对象,那么两种方式都可以,但是一旦它变得更复杂,你就会遇到严重的问题.