7

ここでのとオブジェクトの実際的な違いは何ですか:pp2

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 文字列を取得したとしましょう。とにかくそれを解析する必要があります。

4

6 に答える 6

6

p と p2 の違いは、p2 の内部プロトタイプが でObject.prototypeあるのに対し、p のプロトタイプはPerson.prototype;であることです。にメソッドを追加することでp、すべてのPersonオブジェクトに共通のメソッドまたは属性を追加できますPerson.prototype

したがって、「givenName」、「surname」、「title」などのフィールドを持つ JSON 形式を持つことができ、new Personアプローチを使用することで、次のメソッドを持つことができます。

Person.prototype.getFullName = function () {
    return this.title + " " + this.givenName + " " + this.surname;
}

Personこれは、コンストラクターを使用して派生したすべての s をすぐに利用できます。

于 2013-08-13T09:48:32.357 に答える
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()構文を使用します。Personすべてのデータが入っている (そしてプロトタイプとしては必要ない) JSON 文字列 (たとえば、ajax 呼び出しから) がある場合は、 を使用しJSON.parseます。それ以外の場合は、古き良きプレーンを使用します。

var p2 = {Name:'John'};

サイドノート:

var p2 = JSON.Parse("{Name:'John'}");

は間違っています。次のようにする必要があります。

var p2 = JSON.parse('{"Name":"John"}');
于 2013-08-13T09:49:06.620 に答える
1

簡単に言えば、p は Person オブジェクトであり、p2 は単なるオブジェクト リテラルです。どちらも異なるプロトタイプを持ち、p の Person プロトタイプと p2 の Object プロトタイプに名前を付けます。

最初のケースでは、「クラス」を新しいオブジェクトのコンストラクターとして使用して、新しいオブジェクトを作成する「クラス」を定義します。

2 番目のケースでは、オブジェクト リテラルを作成し、指定したキーに値を割り当てます。

于 2013-08-13T09:54:05.770 に答える
1

解析バージョンは基本的に同じことを行いますが、テキストを分割して翻訳するというオーバーヘッドが追加されます (遅くはありません)。最初の方法を使用してプログラミングする方が良いと思います.生のJSONをコードにぶら下げたくありません:)

JSON.parse は、与えられたデータから非常に基本的なオブジェクトを作成します。問題はありません。

最初のメソッドを使用すると、事前にオブジェクトを定義して拡張し、オブジェクトに含まれるデータをより有効に使用できるようにメソッドと属性を与えることができます。

于 2013-08-13T09:47:43.220 に答える
0

あなたの声明

var p2 = JSON.Parse("{Name:'John'}");

これを行うには非効率的な方法です:

  var p2 = {Name:'John'};
于 2013-08-13T09:48:54.570 に答える