Javascript:基于变量自定义数组推送 - 允许某些类型的标准推送调用

时间:2017-04-24 10:45:36

标签: javascript

我使用以下技术来区分复制两个不同的对象。 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)

1 个答案:

答案 0 :(得分:1)

使用localhost:8100/api方法为函数对象获取默认实现。

.call