function fn1() {};
function fn2() {};
fn2.prototype.arr = [1,2];
var c = fn1.prototype, p = fn2.prototype;
for(var i in p) {c[i] = p[i]};
fn1.prototype.arr.push(3);
fn2.prototype.arr // [1,2,3]
建议用深拷贝的方法来实现:
(function(o) {
if(typeof o != "object") return o;
var obj = {};
for(var p in o) {
obj[p] = arguments.callee(o[p]);
return obj;
}
})();
留言(5 条)
在 蛋屋的建造 留言:
我还以为最后一张图会是蛋屋被强制牵走的那张照片...
2011-03-06 21:03:05
在 Javascript面向对象编程(二):构造函数的继承 留言:
不好意思, 上面这样写当遇到数组时是不行的, 参考峰兄的代码, 修改了一下:
var obj = (o.construcotr === Array)?[]:();
2011-01-13 13:14:32
在 Javascript面向对象编程(二):构造函数的继承 留言:
最后一种通过拷贝的方法来实现继承是有问题的. 这里博主用的是浅拷贝的方法, c[i] 是指向到 p[i], 而非赋值, 这样如果改动到 c[i], 会影响到 p[i]. 例如:
function fn1() {};
function fn2() {};
fn2.prototype.arr = [1,2];
var c = fn1.prototype, p = fn2.prototype;
for(var i in p) {c[i] = p[i]};
fn1.prototype.arr.push(3);
fn2.prototype.arr // [1,2,3]
建议用深拷贝的方法来实现:
(function(o) {
if(typeof o != "object") return o;
var obj = {};
for(var p in o) {
obj[p] = arguments.callee(o[p]);
return obj;
}
})();
2011-01-12 12:18:06
在 Javascript面向对象编程(二):构造函数的继承 留言:
new F() 这里不还是 new 出一个实例么, 按作者的意思, 这里因为是 new 一个空对象, 资源消耗相对较小.
2011-01-12 11:44:10
在 Javascript 面向对象编程(一):封装 留言:
这就涉及到对象的继承机制了. 更直白一点, 涉及到 JS 语言的变量赋值与引用的区分.
2011-01-12 10:35:27