2015-05-09 51 views
1

問題: 呼叫(console.log(d.yakinlik.uzak.X1()))這個函數調用對象方法給出了 「遺漏的類型錯誤:不是一個函數」 錯誤

function Div(isim) { 
    this.loc = document.getElementById(isim); 
    this.getStyle = function (stili) { 
     return window.getComputedStyle(this.loc).getPropertyValue(stili); 
    }; 
    this.getIntStyle = function (stili) { 
     return parseInt(this.getStyle(stili), 10); 
    }; 
    this.yakinlik = { 
     uzak: { 
      X1: function() { 
       return this.getIntStyle('left'); 
      } 
     } 
    }; 
} 

Uncaught TypeError: this.getIntStyle is not a function

我已經嘗試使用:

this.yakinlik = { 
     uzak: { 
     }, 
     orta: { 
     }, 
     yakin: { 
     }, 
     cokyakin: { 
     } 
    }; 
    this.yakinlik.uzak.X1 = function() { return this.getIntStyle('left'); }; 

但它也失敗了。但是當我不使用這種方法this.yakinlik.uzak.X1 = function() { return this.getIntStyle('left'); };像這樣this.yakinlik.uzak.X1 = this.getIntStyle('left');它工作(實際上它給NaN,但它是正常的,因爲它沒有重新計算,所以我必須在那裏使用一種方法)。

這裏是代碼的參與件:不必有使用屬性

'use strict'; 
function Div(isim) { 
    this.loc = document.getElementById(isim); 
    this.getStyle = function (stili) { 
     return window.getComputedStyle(this.loc).getPropertyValue(stili); 
    }; 
    this.getIntStyle = function (stili) { 
     return parseInt(this.getStyle(stili), 10); 
    }; 
    this.yakinlik = { 
     uzak: { 
     }, 
     orta: { 
     }, 
     yakin: { 
     }, 
     cokyakin: { 
     } 
    }; 
    this.yakinlik.uzak.X1 = function() { return this.getIntStyle('left'); }; 
} 

function getRandomInt(min, max) { 
    return Math.floor(Math.random() * (max - min + 1)) + min; 
} 



var d = new Div("d"); 
d.loc.style.left = getRandomInt(0, window.innerWidth - 50) + "px"; 
d.loc.style.top = getRandomInt(0, window.innerHeight - 50) + "px"; 
console.log(d.yakinlik.uzak.X1() + " " + d.getIntStyle('top')); 

我該如何解決這個問題?

謝謝。

回答

3

問題是你在呼喚d.yakinlik.uzak.X1(),所以裏面X1this將參照uzak對象不是Div實例,它不具有getIntStyle財產。

一種解決方案是使用封閉的可變像

function Div(isim) { 
    this.loc = document.getElementById(isim); 
    this.getStyle = function (stili) { 
     return window.getComputedStyle(this.loc).getPropertyValue(stili); 
    }; 
    this.getIntStyle = function (stili) { 
     return parseInt(this.getStyle(stili), 10); 
    }; 
    var div = this; 
    this.yakinlik = { 
     uzak: { 
      X1: function() { 
       return div.getIntStyle('left'); 
      } 
     } 
    }; 
} 

演示:Fiddle

+0

但是,爲什麼它的工作原理,當我使用屬性,而不是有一個方法與'this' – MindlessRanger

+0

@MindlessRanger對不起沒有給你 –

+0

使用'this.getIntStyle('left');'在X1下不會給出錯誤。 – MindlessRanger

相關問題