-1

この 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.butで私を案内してくれましたが、まだそれに取り組んでいます

4

2 に答える 2

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、それが必要な場合は、これがどのように実行できるかです。)

于 2013-09-01T07:16:38.567 に答える
0
self.v.prototype = function clear() {
   self.v = '';
}

する必要があります

self.v.clear = function() {
    self.v = '';
}
于 2013-09-01T06:34:44.177 に答える