1

编辑: 这是我为什么不能做 c.Get.Css() 我做的一个小提琴......它涉及深度复制。 http://jsfiddle.net/5YnhP/

我正在制作一些 javascript 的原型:

var Control = {};
Control.Textbox = function(){};
Control.Textbox.prototype.Get = function(){};
Control.Textbox.prototype.Set = function(item){};

所以它说:

var c = new Control.Textbox();
c.Get();

我想稍微改革一些东西来组织方法,所以它做了类似的事情:

var Control = {};
Control.Textbox = function(){
  this.Get = {};
  this.Set = {};
  this.Get.prototype.Css = function(){};
  //...
};

还是应该说:

var Control = {};
Control.Textbox = function(){
  this.Get = {};
  this.Set = {};
};
Control.Textbox.Get.prototype.Css = function(){};

然后在控制台中执行某些操作,例如:

var x = new Control.Textbox();
x.Get.Css();
x.Set.Css("herp","derp");

我将如何按照我的意愿去做呢?我想将不同的呼叫组织成这样的分组。

我正在尝试找到解决方案,但在过去的几个小时里,我还没有找到解决方案。

4

1 回答 1

2

您编写它的方式不起作用,因为普通对象没有prototype属性,只有函数有。所以代替这个:

var Control = {};
Control.Textbox = function(){
  this.Get = {};
  this.Set = {};
  this.Get.prototype.Css = function(){};
  //...
};

你可以简单地这样写:

var Control = {};
Control.Textbox = function(){
  this.Get = {};
  this.Set = {};
  this.Get.Css = function(){};
  //...
};

现在你可以做你最初想做的事了:

var x = new Control.Textbox();
x.Get.Css();
x.Set.Css("herp","derp");

小提琴

如果,无论出于何种原因,您依赖于Css原型中的方法Get,您可以this.Get使用构造函数创建:

var get = function(){}
get.prototype.Css = function(){};
this.Get = new get();

在较新的浏览器中,您还可以使用Object.create创建具有指定原型的对象:

this.Get = Object.create({
    Css : function(){};
});
于 2013-07-16T19:19:09.537 回答