2012-06-26 40 views
1

我有下面的代碼,當您使用this.它的範圍是公共然而正在錯誤Uncaught TypeError: Object #<addThis> has no method 'returnValue' (anonymous function)爲什麼我會收到錯誤消息對象在JavaScript中沒有方法?

function addThis() { 
    this.value1 = 1; 
    this.value2 = 2; 

    var returnValue = function() { 
     return (this.value1 + this.value2); 
    } 
} 

//Instantiate object and write response 
var simpleObject = new addThis(); 
document.write(simpleObject.returnValue()); 

回答

1

因爲returnValue只是在addThis函數的局部變量,它不會在創建的對象告終。

分配函數對象的屬性:

function addThis() { 
    this.value1 = 1; 
    this.value2 = 2; 

    this.returnValue = function() { 
    return this.value1 + this.value2; 
    }; 
} 

或者使用的原型對象:

function addThis() { 
    this.value1 = 1; 
    this.value2 = 2; 
} 

addThis.prototype.returnValue = function() { 
    return this.value1 + this.value2; 
}; 
+0

將'returnValue'指定爲'addThis'對象的屬性時,是否必須指定'this'關鍵字?我可以不只是'returnValue = ....'?如果不是,那爲什麼? – PeanutsMonkey

+1

@PananutsMonkey:是的,當訪問屬性時,你總是必須指定對象,或者使用'this.propertyName'或'someVariable.propertyName'。範圍永遠不會像面向對象的語言那樣在對象內部。如果你使用'var returnValue = ...'它是一個局部變量,並且如果你只使用'returnValue = ...',那麼它就成爲一個全局變量(除非你在函數的其他地方有'var returnValue;') 。 – Guffa

1

。當您使用var時,它是私人。由於您使用的是var returnValue,因此它是私密的,因此不會暴露在使用中。

事實上,我猜你想隱藏的價值和暴露吸氣,所以扭轉你做了什麼..

function addThis() { 
    var value1 = 1; 
    var value2 = 2; 

    this.returnValue = function() { 
     return (this.value1 + this.value2); 
    } 
} 
+0

感謝。 「你的意思是什麼?」事實上,我猜你想隱藏價值觀並揭露吸氣劑,所以要改變你的做法......「。對不起,我對JavaScript的世界很陌生,所以想確保我明白你的意思。 – PeanutsMonkey

+0

'公共範圍'是否也意味着'全球範圍'?我認爲「這個」僅限於所討論的對象而不是在公共範圍內。 – PeanutsMonkey

+0

@PananutsMonkey否,全局意味着你的變量實際上在窗口名稱空間內。所以不用寫var x = 2,你的* global *就是簡單的x = 2,這和說window.x = 2是一樣的; – Kristian

1

var將宣佈一個局部變量的函數。我覺得你的意思將其分配到this.returnValue

function addThis() { 
    this.value1 = 1; 
    this.value2 = 2; 

    this.returnValue = function() { 
     return (this.value1 + this.value2); 
    }; 
} 

// Instantiate object and write response 
var simpleObject = new addThis(); 
document.write(simpleObject.returnValue());
相關問題