我想在没有引用的情况下克隆原始对象和函数,我的代码是否考虑克隆对象和函数的正确方法?
var apple = new function() {
this.type = "macintosh";
this.color = "red";
}
function aaa() {
return this.color + ' ' + this.type + ' apple';
};
var a = JSON.parse(JSON.stringify(apple))
var b =
JSON.parse(JSON.stringify(apple));
console.log(a)
a.getInfo = aaa
b.getInfo = aaa
a.color='green' // only a is green color
console.log(a.getInfo())
console.log(b.getInfo())
答案 0 :(得分:0)
尝试此功能:
var clone = function (object) {
// Copy everything that is not an object
if (object == null || typeof(object) !== 'object') {
return object
}
// Calling constructor
var temp = new object.constructor()
// Recursively cloning children
for (var key in object) {
temp[key] = clone(object[key])
}
return temp
}
测试:
var test = { a: 0, b: function () { console.log(1) } }
var cloned = clone(test)
答案 1 :(得分:0)
对于克隆对象,可以使用Object.assign
并将第一个参数设置为空对象。
例如
const clone = Object.assign({}, apple.call({}));
const result = aaa.call(clone);
console.log(result);
//=> red macintosh apple;
我在这里使用Function.call
只是因为我不知道你是想要访问全局this
还是不同的范围或什么。如果您 知道this
所指的内容,那么您就可以这样做。
const clone = Object.assign({}, this);
const result = aaa();
console.log(result);