浏览 3650 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-04-17
<script type="text/javascript"> var TestClass = Class.create(); Object.extend(TestClass.prototype, { ary : [], initialize : function (obj) { ary.push(obj); } }); var tc1 = new TestClass("abc"); var tc2 = new TestClass("def"); alert(tc2.ary.length); </script> 上面的代码结果显示tc2对象实例的ary数组属性的长度是2。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-04-17
smcdl 写道 在用Prototype的Class.create方法建立类时,如果类中含有‘对象引用型的属性’,比如数组,则用这样的类new出n个实例,这些实例共享这些属性。例如
<script type="text/javascript"> var TestClass = Class.create(); Object.extend(TestClass.prototype, { ary : [], initialize : function (obj) { ary.push(obj); } }); var tc1 = new TestClass("abc"); var tc2 = new TestClass("def"); alert(tc2.ary.length); </script> 上面的代码结果显示tc2对象实例的ary数组属性的长度是2。 这不是什么bug , 你对extend方法没有理解, 你的代码的意思是 ary 是TestClass类共有的属性,而不是每个类的实例属性, 把 ary的声明放到 initialize 方法里就对了 |
|
返回顶楼 | |
发表时间:2007-04-17
不应该呀,我扩展的是TestClass.prototype,又不是TestClass类本身,每个实例都应该拥有自己的ary
|
|
返回顶楼 | |
发表时间:2007-04-17
楼主对prototype的理解有问题,prototype中的所有属性、方法都会附加到新实例上……
|
|
返回顶楼 | |
发表时间:2007-04-17
的确如此,所以prototype最好不要放可改变状态的对象。
只放一些值属性和一些不可变的对象。 比如function,string,number,boolean, 用的最多的就是function类型。 |
|
返回顶楼 | |