将原型方法放入js dict中

时间:2013-07-16 19:04:28

标签: javascript oop

编辑:这是为什么我不能做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");

我将如何按照自己的意愿去做?我希望将有组织的不同调用分类为这样的分组。

我正在努力找到一个解决方案,但在最近几个小时里,我还没找到一个。

1 个答案:

答案 0 :(得分:2)

你编写它的方式不起作用,因为普通对象没有prototype属性,只有函数有。{1}}属性。所以不要这样:

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");

<强> FIDDLE

如果由于某种原因,您依赖于Css原型中的Get方法,则可以使用构造函数创建this.Get

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

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

this.Get = Object.create({
    Css : function(){};
});