0

オブジェクトのメンバー変数を使用できるようにしたい:

function Upload(file, filename, id){
    this.file=file
    this.filename=filename
    this.id=id;
};

Upload.prototype.displayImage = function(btn){
    $.canvasResize(file,
        {
            width: 160,
            height: 0,
            crop: false,
            quality: 100,
            callback: function (data)
        {
            $('#'+btn).css("background", "url("+data+")")
        }
    });
};

次のようにオブジェクトとメソッドにアクセスします。

var upload = new Upload(frontPic, frontPicName, id);
  upload.displayImage("btnFrontUploadShow");

しかし、私はエラーが発生しています:

ReferenceError: file is not defined
$.canvasResize(file,

変数を displayImage メソッドで使用できないのはなぜですか? また、変数を使用fileできるように displayImage を宣言するにはどうすればfileよいですか?

4

3 に答える 3

3

変数とプロパティを区別する必要があります。コンストラクター関数 ( file, filename, id) の 3 つのパラメーターは、その関数の [ローカル]変数であり、外部からアクセスすることはできません。

それでも、値を割り当てることにより、インスタンス (キーワードで参照) に (同じ名前で)プロパティを作成しました。プロトタイプ メソッドでは、これらのプロパティにしかアクセスできないため、ドット メンバー演算子を使用する必要があります。その名前の変数は、関数のスコープで定義されていません (例外メッセージに明確に記載されています)。代わりに使用してください。thisthis.file

于 2013-03-03T15:22:24.567 に答える
2

オブジェクトの任意のプロパティにアクセスするには、次を使用します。

this.file
this.id
this.{nameOfProperty}
于 2013-03-03T15:13:57.740 に答える
1

すべてのプロトタイプ メソッドで使用できるように「宣言」する方法はありません。this.file代わりにを使用する必要がありfileます。

別の方法は、プロトタイプ メソッドを使用しないことです。

function Upload(file, filename, id) {
    this.file = file;
    this.filename = filename;
    this.id = id;

    this.displayImage = function(btn) {
        $.canvasResize(file,
            {
                width: 160,
                height: 0,
                crop: false,
                quality: 100,
                callback: function(data)
                {
                    $('#' + btn).css("background", "url(" + data + ")")
                }
            }
        });
    };
}
于 2013-03-03T15:13:58.557 に答える