搜尋

首頁  >  問答  >  主體

javascript - 這裡為什麼要把this賦給變數?

draw_anim:function(context){
                var me=this;
                var width = me.canvas.width,height = me.canvas.height;    
                
                    
                var img = new Image();
                img.src = this.imgsrcList[me.current];
                img.onload = function () { 
                        context.clearRect(0,0,width,height);
                        context.drawImage(img, 0, 0,img.width, img.height);
                }

#有什麼好處嗎?直接用不行嗎?

过去多啦不再A梦过去多啦不再A梦2868 天前534

全部回覆(3)我來回復

  • 大家讲道理

    大家讲道理2017-05-18 10:50:59

    一般來說這種情況可能是因為在後面某些不屬於當前環境的函數(如點擊事件)裡面調用this,至於把this保存成臨時變量有沒有性能優化的效果我不太清楚

    如:
    img.onload = function () {

        context.clearRect(0,0,width,height);
        context.drawImage(img, 0, 0,img.width, img.height);
        //你这里想调用上面的this的话就需要用到me,因为这里的this指向的是img

    }

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-05-18 10:50:59

    作用域的問題! me=this 代表目前this的指向, 如果下面在寫this,可能又指向不通的對象,me可以作為一個變數接收本次出現的this 可以在其他函數能使用,如果繼續使用this ,而這個this可能指向其他對象,或未定義!建議可以去看看this指向,作用域這些!

    回覆
    0
  • 習慣沉默

    習慣沉默2017-05-18 10:50:59

    O(∩_∩)O哈哈~ 我也是小白一枚如有錯誤請見諒
    首先你這段程式碼是從一個大對象裡截取的一段,由於你沒給這個大對象,我來假設一個
    var animit={

    draw_anim:function(context){
                var me=this;
                var width = me.canvas.width,height = me.canvas.height;    
                
                    
                var img = new Image();
                img.src = this.imgsrcList[me.current];
                img.onload = function () { 
                        context.clearRect(0,0,width,height);
                        context.drawImage(img, 0, 0,img.width, img.height);
                }

    這時進入了物件的draw_anim的方法裡,此時將this賦給了變數me,在這個方法裡的下面的me就代表這個大物件animit。這樣做是為了避免在draw_anim這個方法裡出現p.onclick等事件或定時器事件裡的this弄混,也就是說此時你在p.onclick操作的function裡面輸出this,指的是就是p,而不是大對象animit。

    回覆
    0
  • 取消回覆