0

JavaScript オブジェクトの複製に関する質問があります。オブジェクト プロトタイプによって定義されたものから変更された、またはインスタンス化後にオブジェクトに追加されたオブジェクト メソッドを複製できるようにしたいと考えています。これは可能ですか?

ここでの設定は、私が定義した JavaScript の「クラス」なので、オブジェクト クラスに固有のクローン メソッドを記述しても問題ありません。メソッドをコピーする方法がわかりません。

例:

function myObject( name, att, dif ) {
    /* 'privileged' methods */
    this.attribute = function(newAtt) {  // just a getter-setter for the 'private' att member
        if(newAtt) { att = newAtt; }
        return att;
    }
    // 'public' members
    this.printName = name;
}

myObject.prototype.genericMethod = function() {
    // does what is usually needed for myObjects
}


/* Create an instance of myObject */
var object153 = new myObject( '153rd Object', 'ABC', 2 );
// object153 needs to vary from most instances of myObject:
object153.genericMethod = function() {
    // new code here specific to myObject instance object153
}
/* These instances become a collection of objects which I will use subsets of later. */


/* Now I need to clone a subset of myObjects, including object153 */
var copyOfObject153 = object153.clone();
// I want copyOfObject153 to have a genericMethod method, and I want it to be the one
// defined to be specific to object153 above.  How do I do that in my clone() method?
// The method really needs to still be called 'genericMethod', too.
4

2 に答える 2

1

クローン関数で、オブジェクトの各メソッドをテストして、オブジェクトのコンストラクターのプロトタイプの同じメソッドと等しいかどうかを確認します。

if (obj[method] != obj.constructor.prototype[method])
    clone[method] = obj[method];
于 2011-09-16T16:31:28.043 に答える
0

浅いコピーが必要なようです。ただし、ディープ コピーではないため、オブジェクトはインスタンス間で共有されることに注意してください。

function clone(obj) {
   var newObj = new obj.constructor();
   for (var prop in obj) {
     newObj[prop] = obj[prop];
   }
   return newObj;
}
var cloned = clone(object153);

別の構文は次のようになります

myObj.prototype.clone = function() {
   var newObj = new this.constructor();
   for (var prop in this) {
     newObj[prop] = this[prop];
   }
   return newObj;
}
var cloned = object153.clone();

試してみて、うまくいくかどうかを確認してください。何をしているのかまだわかりません。そうでない場合は、その理由を説明してください。そうすれば、問題をよりよく理解できます。

于 2011-09-16T19:12:25.630 に答える