3

違いは何ですか(プロトタイプ経由)

var Todo = {};

Todo.prototype.name = "...";
Todo.prototype.hello = function() { ... }

Vs (変数と関数の「外部」オブジェクト)

var Todo = {}
Todo.name = "..."
Todo.hello = function() { ... }

または以下でも:オブジェクト内の変数と関数

var Todo = {
    name: "...",
    hello = function() { ... }
}
4

4 に答える 4

2

({}) instanceof Object === true最初のものは、オブジェクトインスタンス( )を扱っているので意味がありません。prototypeプロパティはありません(Objectあります)。

あなたはこれらの2つのパターンの違いについて質問しているかもしれません...

var ObjA = function() {
    this.method = function() {};
};

var ObjB = function() {};

ObjB.prototype.method = function() {};

jsFiddle

前者は、インスタンス化されるとより多くのメモリを使用します-各オブジェクトには独自のがありmethodます。後者はそれぞれ独自のmethod、オブジェクトmethod上のライフを持​​ちませんprototype。これは、親でアクセスしようとしたときにプロトタイプチェーンの次のコマンドです。

于 2012-06-01T07:47:34.027 に答える
2

次のように考えてください

プロトタイプで宣言されたプロパティまたは関数は、Todoのインスタンスメンバーです。

プロトタイプなしで宣言されたプロパティまたは関数は、Todoの静的メンバーです。

于 2012-06-01T07:53:01.110 に答える
0

方法#1と#2(例#3とほぼ同じ)の大きな違いはnew、プロトタイプを介して関数を拡張する場合に使用する必要のあるキーワードにあります。

var Todo1 = function() {};
Todo1.prototype.name = "Foobar";

var Todo2 = {name: "Foobar" }

var a = Todo1;
console.log(a.name); // no property retrieved

var b = Todo2;
console.log(b.name); // Foobar

var c = new Todo1;
console.log(c.name); // Foobar
于 2012-06-01T07:52:37.483 に答える