我试图通过添加属性来动态生成原型以节省时间。我的愿望是只生成一次原型,因为生成过程非常耗时,然后将此原型用于另一个对象。
// Generated prototype
var PROTO = {
a: "a",
b: "b",
data : { // Object dynamically added through time-consuming function
c: "c",
d: "d"
}
}
function OBJ() {}
OBJ.prototype = PROTO;
var obj1 = new OBJ();
var obj2 = new OBJ();
PRINT1();
obj1.a = "non a";
obj1.data.c = "non c";
PRINT2();
在 PRINT1 时,输出为
obj1: (a, b, c, d), obj2: (a, b, c, d)
PRINT2 输出
obj1: (non a, b, non c, d), obj2: (a, b, non c, d)
我知道obj1和obj2都与 data 对象共享相同的引用,但它并不是原型在概念中应该如何工作......
我也尝试过这种方式,但它没有用。
function PROTO () { ... }
[...]
OBJ.prototype = new PROTO();
如何从生成的原型中获取具有相同内部结构的对象?
答案 0 :(得分:1)
您需要为每个实例创建一个自己的子对象,没有办法解决这个问题。使用android:isScrollContainer="true"
时,您必须手动执行此操作,如果您使用构造函数,则可以在那里执行:
Object.create
答案 1 :(得分:1)
确切地说,对象引用和原型是如何工作的。
如果在当前对象上找不到被访问的属性,你可以想象原型继承,比如对象是一个代理,并且回退到原型。
每个实例都引用相同的原型对象。
因此,如果访问obj.data,则访问(唯一的)prototype-object上的data-object,从而为每个实例更改它。这有时可能是你想要的,大部分时间都不是,但它与其他所有对象引用都是一致的。
但我认为你试图解决错误的问题(XY问题)。你可以通过使用原型来控制你可以塑造多少纳秒,而不是更好地补充池,以避免创建,删除和垃圾收集的任务。