2013-03-03 24 views
0

我希望能夠使用一個對象的成員變量:你如何添加方法添加到JavaScript對象,並使用對象的變量

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變量日e displayImage方法,以及如何聲明displayImage以使file變量可供使用?

+5

你想使用'this.file' – 2013-03-03 15:08:36

+1

更一般地說,所有的實例變量都需要作爲'this.something'訪問。 – Xymostech 2013-03-03 15:09:15

+0

可能重複[Javascript:我是否需要將this.var放置在對象中的每個變量?](http://stackoverflow.com/questions/13418669/javascript-do-i-need-to-put-this- VAR換每可變功能於一個對象) – Bergi 2013-03-03 15:14:57

回答

3

您需要的變量和屬性來區分。構造函數的三個參數(file, filename, id)是[local] 變量到該函數,並且不能從外部訪問。

然而,您可以通過分配它們的值創建您的實例(通過this keyword參考)性質(同名)。在原型方法中,您只能訪問這些屬性,因此您需要爲它們使用點成員操作符 - 具有該名稱的變量未在函數的作用域中定義(如異常消息明確指出的那樣)。改爲使用this.file

2

要訪問任何財產上的對象只需使用:

this.file 
this.id 
this.{nameOfProperty} 
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 + ")") 
       } 
      } 
     }); 
    }; 
}