[英]Create twin object a.k.a. inheritance clone
下面的工作twin(source)
函数生成一个新对象,它具有与source
相同的属性和相同的父对象(原型链)。 (例如twin(isFinite)
将是[object Object]
和instanceof Function
)任何本机函数是否提供相同的效果?
/**
* @param {Object|Function} source
* @param {(Object|Function|null)=} parent defaults to source's parents
* @return {Object}
*/
function twin(source, parent) {
var twin, owned, i = arguments.length;
source = i ? source : this; // use self if called w/o args
parent = 2 == i ? parent : Object.getPrototypeOf(source);
twin = Object.create(parent);
owned = Object.getOwnPropertyNames(source);
for (i = owned.length; i--;) {
twin[owned[i]] = source[owned[i]];
}
return twin;
}
更新: 血液中有.twin
方法。
你可以尝试这样的事情:
obj= eval(uneval(objSource));
它仅适用于FF,但其目的是序列化一个对象和eval,序列化的字符串实例化(原型化)一个具有与第一个相同属性的新对象。
您还可以使用函数JSON.stringify作为“uneval”函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.