javascript – 如何构建虚拟对象缓存?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何构建虚拟对象缓存?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2106字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 如何构建虚拟对象缓存?](/upload/InfoBanner/zyjiaocheng/743/db4d382e44ec4acf88d15f5ea4366daf.jpg)
我有一组对象,我希望能够使用相同的语法
>建立一个新的对象或
>加载现有对象.
我已经构建了一个“缓存”,它使用对象和创建对象的上下文,并使用此数据来查看该对象是否先前已创建.因此,例如,如果我构建了Object = new myObject(param1,param2),则缓存会将对象保存为{obj:theObject,context:{param1:param1,param2:param2}}并且如果我给出,将再次加载它是一个具有相同param1和param2值的上下文.
我以为我很聪明,能够像这样构建对象:
myObject = function(param1, param2) {
var context = { param1: param1, param2: param2 };
var cacheHit = this.cache.find(context);
if (cacheHit) return cacheHit; // <-- Doesn't work :(
this.param1 = param1;
this.param2 = param2;
this.cache.save(this, context);
};
myObject.prototype = { cache: new myCacheObject }; // Shared cache in all instances
遗憾的是,我了解到new关键字意味着我不能使用return语句.我希望内部化缓存集合,以便可以在没有内置缓存的情况下构建类似的对象,并且它们的工作方式相同.但是,我不认为我可以使用new关键字执行此操作.
我将如何实现这一目标?
更新:
事实证明,这种方法确实有效,我的问题源于继承(特别是因为这是JavaScript继承).扩展此对象时,我使用以下语法:
myObject = function(param1, param2) {
if (arguments.length) {
var context = { param1: param1, param2: param2 };
var cacheHit = this.cache.find(context);
if (cacheHit) return cacheHit;
this.param1 = param1;
this.param2 = param2;
this.cache.save(this, context);
}
};
// Extended from myObject
anotherObject = function(foo, bar) {
// Call parent constructor
myObject.call(this, foo, bar);
};
anotherObject.prototype = new myObject;
anotherObject.prototype.constructor = anotherObject;
由于调用父构造函数不能强制子项返回值,因此子项必须明确表示这一点.
anotherObject = function(foo, bar) {
return myObject.call(this, foo, bar);
};
希望我能想出一种更简洁的方法,因为如果子类在其构造函数中执行任何操作,我将始终检查是否返回了值.
anotherObject = function(foo, bar) {
var possibleCacheHit = myObject.call(this, foo, bar);
if (possibleCacheHit) return possibleCacheHit;
// Do stuff
};
解决方法:
I’ve learned that the
new
keyword means that I cannot use areturn
statement.
幸运的是,that’s not true.如果你返回一个非空的对象引用(参见具体的链接答案),new运算符实际上会让你做你想做的事.
内容总结
以上是互联网集市为您收集整理的javascript – 如何构建虚拟对象缓存?全部内容,希望文章能够帮你解决javascript – 如何构建虚拟对象缓存?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。