动态更改JavaScript对象的原型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了动态更改JavaScript对象的原型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1787字,纯文字阅读大概需要3分钟。
内容图文
我的最后一个任务是完全恢复以前使用JSON保存的对象.目前,JSON仅允许恢复数据,而不能恢复行为.一种可能的解决方案是创建一个新对象(将其称为obj)并将数据从JSON恢复对象复制??到obj.但这对我来说并不好.我要问的是,有没有一种方法可以动态更改JavaScript中的对象原型?
这是我目前解决问题的方式(使用自制的复制方法):
function Obj() {
this.D = "D";
this.E = "E";
this.F = "F";
this.toString = function () {
return this.D + " * " + this.E + " * " + this.F;
};
this.copy = function (anotherObj) {
for (var property in anotherObj) {
if (isDef(anotherObj[property]) && isDef(this[property])) {
this[property] = anotherObj[property];
}
}
}
}
;
$(document).ready(function () {
var str = $.toJSON(new Obj());
$("#result").append("<p>JSON: " + str + "</p>");
var obj = new Obj();
obj.copy($.parseJSON(str));
$("#result").append("<p>Recovered obj: " + obj.toString() + "</p>");
});
function isDef(variable)
{
return typeof variable !== undefined;
}
解决方法:
许多流行的JS库提供了更简单的方法.
例如,如果您使用的是jQuery,则可以使用jQuery.extend()方法而不是您的复制函数,如下所示:
var obj = $.extend(new Obj(), $.parseJSON(str));
分叉的jsFiddle here.
编辑:基于来自this question的想法,我能够使还原的对象也具有所有嵌套的功能,请参见updated jsFiddle.
核心思想是使用原型而不是属性,然后确保从JSON恢复的对象(仅是数据)是$.extend()的第一个参数:
function Obj2() {
this.A = "A";
}
Obj2.prototype.toString = function() {
return this.A;
};
function Obj() {
this.A = new Obj2();
this.D = "D";
this.E = "E";
this.F = "F";
}
Obj.prototype.toString = function() {
return this.A.toString() + " * " + this.D + " * " + this.E + " * " + this.F;
};
var str = $.toJSON(new Obj());
$("#result").append("<p>JSON: " + str + "</p>");
var obj = jQuery.extend($.parseJSON(str), new Obj());
$("#result").append("<p>Recovered obj: " + obj.toString() + "</p>");
内容总结
以上是互联网集市为您收集整理的动态更改JavaScript对象的原型全部内容,希望文章能够帮你解决动态更改JavaScript对象的原型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。