【问题标题】:javascript: prototyping with multiple objectsjavascript:使用多个对象进行原型设计
【发布时间】:2011-04-29 14:46:26
【问题描述】:

很抱歉,如果在某个地方回答了这个问题(可能是),但我不太确定如何正确提问,所以我搜索失败:(

基本上我想做这样的事情:

(a||b).prototype.c = function () {
  // do something
}

基本上 a 和 b 是对象。一个或另一个将存在,但不会同时存在。但我不知道哪个会存在,但我需要为任何一个添加一个方法。

现在,我知道我可以这样做:

if (typeof(a) == 'object') {
  a.prototype.c = c;
} else if (typeof(b) == 'object') {
  b.prototype.c = c;
} 

function c () {
  // do something
}

但这有 c 在全局级别拥有自己的命名空间的问题,我不希望这样。我不希望 c 在任何时候都在全局级别拥有自己的命名空间。

Soo...显然上面的第一段代码不起作用。我该怎么办?或者这样的事情根本不可能?如果之前已经回答过,请随时关闭并指出正确的方向......

【问题讨论】:

  • 实际上,如果我删除原型部分,我认为我的第一件事确实有效,因为我将 c 添加到实例化对象中,而不是对类进行原型设计,对吧?
  • 种,prototype是用来访问对象的类型的,跳过它,你访问实际的对象。
  • 是的,我正在使用 2 个实际对象,所以我认为我实际上根本不应该进行原型设计。显然 (a||b).c = function () { .. } 确实有效!

标签: javascript namespaces prototyping


【解决方案1】:

我认为这样的事情会解决你的问题:

(function() {
  var f = function() {
    //Prototype function
  };
  if(a)
    a.prototype.f = f;
  if(b)
    b.prototype.f = f;
})();

【讨论】:

  • 嗯,是的,如果我想这样做,我认为这应该可以工作,但我认为实际上我根本不需要原型,因为我正在尝试添加一种方法一个实例化的对象或另一个。但我仍然很好奇我将如何在一个或另一个类上进行原型设计,我会标记,因为这确实回答了这个问题,谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-03-06
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
相关资源
最近更新 更多