繁体   English   中英

为什么我的Java语言中的extend()方法不能用于3个或更多对象?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM