2010-07-07 159 views
1

我爲什麼這個代碼是這樣寫的困惑,但我一定要了解這一點很重要:在jQuery中,如何在這種情況下正確使用「this」?

$.fn.mapImage = function(options){ 
    //Set user input options and defaults 
    var optionConfig = $.extend({}, $.fn.mapImage.defaults, options); 

    image=this; 
    this.image = this; 

    // Assign defaults 
    this.getUrl = optionConfig.getUrl; 
    this.saveUrl = optionConfig.saveUrl; 
    this.deleteUrl = optionConfig.deleteUrl; 
    this.editable = optionConfig.editable; 
    this.pinpoints = optionConfig.pinpoints; 
    image.pinpoints = optionConfig.pinpoints; 
    image.pinpointCount = 0; 


    this.canvas = $('<div class="canvas"><div class="create-mode"></div><div class="edit-mode"></div></div>'); 
    this.image.after(this.canvas); 
    this.canvas.height(this.height()); 
    this.canvas.width(this.width()); 
    this.canvas.css('background-image', 'url("' + this.attr('src') + '")'); 
    this.canvas.children('.create-mode').css('cursor', 'crosshair'); 
    this.canvas.children('.create-mode, .edit-mode').height(this.height()); 
    this.canvas.children('.create-mode, .edit-mode').width(this.width()); 
    this.canvas.children('.edit-mode').show(); 
    this.canvas.children('.create-mode').hide(); 
    $(this).hide(); 


} 

我不什麼明白的是爲什麼代碼有image=thisthis.image=this,是同樣的事情?爲什麼不做一些像image.after(this.canvas)這樣的this是指第一個地方通過函數傳遞的當前對象?

回答

0

什麼我不明白的是爲何 代碼有image=thisthis.image=this,是一回事嗎?

不,他們不是......

image = this; 
this.image = this; 

在,我們可以說,imagethis.image指的是同一件事this,對不對?

image = this; 
//^ ^----- current object 
// | --- this image is a variable 
this.image = this; 
//  ^--- this image is a property of current object, this 
// because of image = this;, we can also say that 
image.image = this; 
//^^ ^----- current object 
// | |------------ property 
// |----------------- variable 

你也可以得到一些idea here

+0

這是一個很模糊的答案 – Ben 2010-07-07 06:32:35

+0

@Ben - 我盡力了......哪部分你發現不清楚? – Reigel 2010-07-07 06:39:56

+0

在評論中使用「this」這個詞使得解釋非常混亂,因爲你試圖解釋關鍵字this。我知道你的意思,但對於有人想知道它,我認爲這隻會讓人困惑。 – Ben 2010-07-11 03:29:43

1

爲什麼這是混淆了(沒有雙關語意)的原因是因爲你缺少一點的代碼上面的例子是有道理的:

var image; // necessary otherwise you'll get a runtime exception. 

$.fn.mapImage = function(options){ 
    //Set user input options and defaults 
    var optionConfig = $.extend({}, $.fn.mapImage.defaults, options); 

    image=this; 
    this.image = this 
    ... 

現在,當你看看:

image=this; 
this.image = this 

它更有意義,不是嗎?第一項任務是針對局部變量'var image'。這樣,即使函數完成執行,也會保留引用。

第二項作業是針對當前對象的屬性,由'this'命名。

這是你的解釋,但對我來說,在代碼中同時使用this.imageimage沒有意義。只要使用image就可以。

相關問題