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,

为什么不能file在 displayImage 方法中使用变量,如何声明 displayImage 使file变量可以使用?

4

3 回答 3

3

您需要区分变量和属性。构造函数 ( file, filename, id) 的三个参数是该函数的 [local]变量,不能从外部访问。

然而,您通过为实例分配值来创建属性(具有相同名称)(通过this关键字引用)。在原型方法中,您只能访问这些属性,因此您需要为它们使用点成员运算符 - 具有该名称的变量未在函数的范围内定义(如异常消息明确指出的那样)。改为使用this.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 回答