我使用以下技术来区分复制两个不同的对象。 o2.copy执行深拷贝,而o3.copy执行浅拷贝。
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);
这很好用。
{ name: 'old' }
{ copy: [Function], name: '..old' }
{ name: 'New' }
{ copy: [Function], name: '..old' }
现在我有一个数组A.
var A = [];
现在我想将深拷贝绑定到此数组A的推送。
我是否可以通过以下方式覆盖推送:如果传入的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)
答案 0 :(得分:1)
使用localhost:8100/api
方法为函数对象获取默认实现。
.call