定义javascript类属性的函数

时间:2013-09-01 06:32:25

标签: javascript design-patterns

我有这个Javascript类,想要添加某种功能(比如原型) 到这个类的属性。

function theUploader(virtualField)
{
     var self = this;
   //self.v = virtualField;
     self.v = (function(){return self.v; this.clear = function(){self.v = '';}})()
     self.v.prototype = function clear() {
       self.v = '';
     }
}
我试过那些台词。 我无法找到定义这样一个东西的正确方法。我想这样称呼它

var temp = new theUploader('smart');
temp.v.clear();
有人用jsaon指导我,但仍在努力

2 个答案:

答案 0 :(得分:0)

self.v.prototype = function clear() {
   self.v = '';
}

应该是

self.v.clear = function() {
    self.v = '';
}

答案 1 :(得分:0)

这一行的问题:

self.v = (function(){return self.v; this.clear = function(){self.v = '';}})()
如果你将它分成几行,

......会更明显:

self.v = (function(){
             return self.v;
             this.clear = function(){
                             self.v = '';
             }
         })()

它是一个立即调用的函数表达式,它在第一行返回,因此它永远不会到达this.clear = ...行。返回的值self.v此时将为undefined,这意味着您为该值分配的self.v属性也将为undefined,这意味着此行:

self.v.prototype = function clear() {

...您将收到错误TypeError: Cannot set property 'prototype' of undefined

鉴于您theUploader()函数中的混淆,确切地说出您要尝试做什么有点难,但鉴于您说您希望能够执行此操作:

var temp = new theUploader('smart');
temp.v.clear();

然后你需要创建一个.v属性,它本身就是一个具有.clear()方法的对象,所以:

function theUploader(virtualField)
{
     var self = this;
     self.v = {};                                // create a v property that is an object
     self.v.clear = function(){self.v = '';};    // add a method to v
}

......会这样做的。或者您可以直接在对象文字中定义clear函数:

     self.v = {
        clear : function(){self.v = '';}
     };

(无论哪种方式,对我来说,调用self.v.clear()实际上会用空字符串覆盖.v属性并不合理,但如果这就是你想要的,那你就是这样做的。)