此处p
和p2
个对象之间的实用差异是什么:
var Person = function(name) { this.Name=name; }
var p = new Person("John");
var p2 = JSON.parse('{"Name":"John"}');
当我更好地创建new Person()
并从已解析的JSON复制值时,有哪些情况,而不是使用解析后的JSON对象,因为我会使用Person
的实例?
PS。假设我从WebSocket获得了JSON字符串,无论如何我都要解析它。
答案 0 :(得分:6)
p和p2之间的区别在于p2的内部原型是Object.prototype
,而p的原型是Person.prototype
;对于p
,您可以通过向Person
添加方法为所有Person.prototype
个对象添加常用方法或属性。
因此,你可以让JSON格式包含诸如“givenName”,“surname”“title”之类的字段,并且通过使用new Person
方法,你可以有一个方法:
Person.prototype.getFullName = function () {
return this.title + " " + this.givenName + " " + this.surname;
}
随时可用的所有Person
使用构造函数派生。
答案 1 :(得分:2)
主要区别在于它们具有不同的原型链:
p.constructor -> function (name) { this.Name=name; }
(the Person function)
chain: p -> Person -> Object
p2.constructor -> function Object() { [native code] }
(the standard object constructor)
chain: p2 -> Object
如果您需要正确的原型链(例如,您想要继承Person.prototype
上有多个方法),请使用new Person()
构造。如果您有一个JSON字符串(例如来自ajax调用),您拥有所有数据(并且不需要Person
作为原型),请使用JSON.parse
,否则请使用好的ol'纯:
var p2 = {Name:'John'};
旁注:
var p2 = JSON.Parse("{Name:'John'}");
错了,需要:
var p2 = JSON.parse('{"Name":"John"}');
答案 2 :(得分:2)
主要区别在于p
是一个对象,它是Person
的实例,而p2
是一个“普通”对象,它只是{{1}的一个实例}。
这种差异何时重要?
1)访问原型属性:
Object
或者:
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
2)使用console.log(p.constructor) //Person
console.log(p2.constructor) //Object
运算符:
instanceof
3)与继承有关的一切
所有这三点基本上都可以追溯到原型链,这两种方式看起来都是这样的:
p instanceof Person //true
p2 instanceof Person //false
现在,既然你有这个构造函数,我建议你总是使用它,因为如果你把p --> Person --> Object
p2 --> Object
个对象与普通对象混合起来会很麻烦。如果你真的只想要一个具有Person
属性的对象,那么你可以在两种方式都很好,但只要它变得更复杂一点,你就会遇到严重的问题。
答案 3 :(得分:1)
解析版本基本上都是相同的,增加了打破文本和翻译它的开销(这不是很慢)。 我认为使用第一种方法编程更好,你不希望在代码中使用原始JSON:)
JSON.parse将根据您提供的数据创建一个非常基本的对象,这没有问题
使用第一种方法可以预先定义和扩展对象,为其提供方法和属性,以便更好地使用它包含的数据。
答案 4 :(得分:1)
简单地说,p是Person对象,p2只是一个对象文字。它们都有不同的原型,命名为p的Person原型和p2的Object原型。
第一种情况定义了一个“类”,您可以使用“class”作为新对象的构造函数来创建新对象。
第二种情况创建一个对象文字并将值分配给指定的键。
答案 5 :(得分:0)
你的陈述
var p2 = JSON.Parse("{Name:'John'}");
只是一种效率低下的方法:
var p2 = {Name:'John'};