[英]Why my extend() method in Javascript don't work for 3 and more objects?
我有3个对象。
netBuilder编号NumberingMethodDefault
而且我有一些扩展方法。
extend: function (Child, Parent) {
var F = function () {};
F.prototype = Parent.prototype;
Child.prototype = new F();
Child.prototype.constructor = Child;
Child.superclass = Parent.prototype;
this.mixin(Child, Parent);
},
/**
* @param {type} dst
* @param {type} src
* @returns {undefined}
*/
mixin: function (dst, src) {
var tobj = {};
for (var x in src) {
if ((typeof tobj[x] == "undefined") || (tobj[x] != src[x])) {
dst[x] = src[x];
}
}
if (document.all && !document.isOpera) {
var p = src.toString;
if (typeof p == "function" && p != dst.toString && p != tobj.toString &&
p != "\nfunction toString() {\n [native code]\n}\n") {
dst.toString = src.toString;
}
}
}
比我尝试编号扩展从netBuilder和NumberingMethodDefault扩展从编号。
oopUtility.extend(Numbering, netBuilder);
oopUtility.extend(NumberingMethodDefault, Numbering);
并调用超类
Numbering.superclass.constructor.call(this, arguments);
NumberingMethodDefault.superclass.constructor.call(this, arguments);
编号具有方法setNumber()。 我可以在编号中访问netBuilder方法,但是在NumberingMethodDefault中我无法从编号执行方法setNumber()。
Uncaught TypeError: Object #<NumberingMethodDefault> has no method 'setNumber'
比我console.log()什么是NumberingMethodDefault的超类
console.log(NumberingMethodDefault.superclass);
//and it was netBuilder, not Numbering! о_О
我该如何运作。 我需要扩展3个或更多对象!
这是因为您对mixin
的调用将属性从一个对象手动复制到另一个对象,并且正在覆盖.superclass
分配。 如果要模拟类继承,则不需要这种方式的mixins,因此,完全删除该代码,就不会有问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.