0
2つの異なるオブジェクトのコピーソーシングを区別するために、次の手法を使用しています。 o2.copyはディープコピーを行い、o3.copyはシャローコピーを行います。Javascript:変数に基づいた配列プッシュのカスタマイズ - いくつかのタイプの標準プッシュコールを可能にする
var o1 = {name: "old"};
console.log(o1);
var o3 = {}; var o2 = {};
o2.copy = function(o){
for (var key in o) {
o2[key] = ".."+o[key];
}
};
o2.copy(o1);
console.log(o2);
o3.copy = function(o){
o3 = o;
};
o3.copy(o1);
console.log(o3);
o2.copy(o1);
o1.name = "New";
console.log(o2);
これは問題なく動作します。私は、このようなAにプッシュにこのメソッドをオーバーライドすることができます今、私は今、私はこの配列A
のプッシュに深いコピーをバインドしたい配列A
var A = [];
を持って
{ name: 'old' }
{ copy: [Function], name: '..old' }
{ name: 'New' }
{ copy: [Function], name: '..old' }
ところで、入ってくるargがオブジェクトであれば、それ以外のディープコピーを行うのでしょうか?何とかこれを行うことは可能ですか?
var A = [];
A.push = function (o) {
if (typeof o === "object") {
A[A.length] = {}
for (var key in o) {
A[A.length-1][key] = o[key];
}
} else {
console.log("Non-object push");
push(); //<--- How to call the default array push here
}
}
A.push (o1);
A.push ("Test");
o1.name = "new";
console.log(A[A.length-1].name)
//現在の出力は、デフォルトの実装を取得するための関数オブジェクトのための
{ name: 'old' }
+old
{ name: 'NewAgain' }
old
Non-object push
/temp/file.js:35
push();
^
ReferenceError: push is not defined
at Array.A.push (/temp/file.js:35:9)
at Object.<anonymous> (/temp/file.js:40:3)
at Module._compile (module.js:571:32)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:488:32)
at tryModuleLoad (module.js:447:12)
at Function.Module._load (module.js:439:3)
at Module.runMain (module.js:605:10)
at run (bootstrap_node.js:418:7)
at startup (bootstrap_node.js:139:9)