2

JavaScript でオブジェクトを作成するとします。

var myObject = {};

違いは何ですか...

myObject.someFunc = function(){...}; 

myObject.prototype.someFunc = function(){...} 

JavaScriptで?

違いを理解するのに苦労しています。違いがあるかどうか、これらの構文のいずれかをいつどのように使用するかを理解するのに苦労しています。

このようなコードを書くと、実際には違いがないように思えます。

クライアント側 (ブラウザ) とサーバー側 (node.js など) の両方の回答を探しています。

適切かつ正確にコーディングしたいのですが、これは本当に気になります。

4

3 に答える 3

3

この場合:

var myObject = {};
myObject.someFunc = function(){...}; 

あなたがしているのは、たまたま関数への参照であるプロパティを持つ単純なオブジェクトを作成することだけです。これは、多くの場合、名前の間隔のためだけに行われます。つまり、関数の負荷全体を共通のオブジェクトの下の 1 つの場所にグループ化するためです。

ただし、var myObject = {} 実際には a がないprototypeことに注意してください。そのため、2 番目の例は不可能です。

オブジェクトがプロトタイプを持つためには、コンストラクター関数の結果でなければなりません。

function MyObject() {
    ...
}

MyObject.prototype.someFunc = function() { }

var myObject = new MyObject();
// myObject.someFunc can now be used

プロトタイプはコンストラクター関数のプロパティであり、そのクラスのインスタンスのプロパティではありません。

関数をプロトタイプに配置すると、関数オブジェクトのインスタンスが 1 つだけ存在し、クラスのすべてのインスタンスによって共有されます。これは、各インスタンスにコピーを作成するよりもメモリ効率が高くなります。

これはすべて、コードがブラウザーにあるかサーバーにあるかに関係なく適用されます。コードは同じ言語です。

于 2012-05-24T18:29:55.693 に答える
0

myObject.someFunc = function(){...}はその関数の1回限りのインスタンスであり、戻り値はmyObjectのsomeFuncプロパティに割り当てられています。

myObject.prototype.someFunc = function(){}は実際には、myObjectのどこからでも呼び出すことができ、毎回同じ値のインスタンスを変更するメソッドを作成しています。

myObject.prototype.someFunc = function(num){
    this.num_to_be_stored = num;
}

最初のインスタンスで起こっていることであるsomeFuncではなくnum_to_be_storedの値を変更します。

編集:申し訳ありませんが、早朝は私が何を言おうとしていたのかはっきりしていませんでした。

于 2012-05-24T18:31:16.420 に答える
0

基本的に、これは静的メソッド(またはそのオブジェクト(この場合はmyObject)のみにアタッチされたメソッド)を表します。

myObject.someFunc = function () {...};

これは、オブジェクトのプロトタイプにアタッチされたメソッド(インスタンスメソッド)を表します。

myObject.prototype.someFunc = function () {...};
于 2012-05-24T18:31:44.273 に答える