首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我在Javascript中的extend()方法不适用于3个或更多的对象?

为什么我在Javascript中的extend()方法不适用于3个或更多的对象?
EN

Stack Overflow用户
提问于 2013-05-21 12:20:54
回答 1查看 132关注 0票数 0

我有3个对象。

netBuilder编号NumberingMethodDefault

我有一些扩展方法。

代码语言:javascript
复制
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扩展到Numbering。

代码语言:javascript
复制
oopUtility.extend(Numbering, netBuilder);
oopUtility.extend(NumberingMethodDefault, Numbering);

并调用超类

代码语言:javascript
复制
Numbering.superclass.constructor.call(this, arguments);
NumberingMethodDefault.superclass.constructor.call(this, arguments);

编号具有方法setNumber()。我可以对netBuilder方法进行编号,但在NumberingMethodDefault中,我不能从编号执行setNumber()方法。

代码语言:javascript
复制
Uncaught TypeError: Object #<NumberingMethodDefault> has no method 'setNumber'

NumberingMethodDefault的超类是什么?

代码语言:javascript
复制
console.log(NumberingMethodDefault.superclass);
//and it was netBuilder, not Numbering! о_О

我怎么才能让它工作。我需要扩展3个或更多的对象!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-21 14:21:32

这是因为您对mixin的调用手动将属性从一个对象复制到另一个对象,并且会覆盖.superclass赋值。如果您正在模拟类继承,那么您将不需要以这种方式使用mixins,因此完全删除该代码应该不会有问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16662101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档