2016-02-08 34 views
0

我剛接觸JavaScript中的「classes」,所以我希望我在我的問題中使用了正確的術語。JavaScript:在構造函數中使用原型函數更改變量

我對此進行了修改。構造函數中的變量可用於通過原型定義的所有函數。 這似乎是正確的在一個方向,但我不能從一個函數內更新變量。

這裏是一個小的jsfiddle https://jsfiddle.net/2g4vnL9b/

var littleTest = function() { 
    this.testVar = "blub"; 
} 
littleTest.prototype = { 
    changeTestVar: function(val) { 
    this.testVar = val; 
    }, 
    changeTestVar2: function(val) { 
    return val; 
    } 
} 

var myTest = new littleTest(); 
console.log(myTest.testVar); // -> blub 

myTest.changeTestVar = "foo"; 
console.log(myTest.testVar); // -> blub 

myTest.testVar = myTest.changeTestVar2("foo"); 
console.log(myTest.testVar); // -> foo 

我試圖更新從功能test.changeTestVar的this.testVar,但它不會被保存供以後使用對象內。只有當我直接設置它纔會被保存。 有人可以解釋爲什麼我的代碼行爲像它的行爲,我必須改變?

非常感謝你

+1

我認爲這行是錯誤的'myTest.changeTestVar =「foo」;'可能你的意思是'myTest.changeTestVar(「foo」);'? – MysterX

+0

在'changeTestVar2'中,你沒有設置'this.testVar2',你只是返回在 –

+0

中傳遞的信息。注意,在完成這個工作之後,在方法中設置'this.testVar'會創建一個名爲方法。原型中的'testVar'保持它的值,當你創建'littleTest'的新實例時,在這些實例中的'testVar'將會是''blub''。 – Teemu

回答

0

ChangeTestVar是一個函數,它是寫在不同的情況下

var myTest = new littleTest(); 
console.log(myTest.testVar); // -> blub 

myTest.changeTestVar("foo"); 
console.log(myTest.testVar); // -> foo 

FIDDLE

+0

我再次閱讀我的問題後,我覺得很愚蠢......它需要10分鐘,我可以將您的答案標記爲我的答案,謝謝 – celevra

+0

沒問題,我們都時不時地做出愚蠢和奇怪的錯誤。 – adeneo

1

你需要調用changeTestVar作爲一個函數,而不是用新的覆蓋它值。

嘗試以下操作:

myTest.changeTestVar("foo"); 
console.log(myTest.testVar); 

此外,changeTestVar2根本不會改變this變量,它只是返回的值傳遞這是通常被稱爲一個「身份」的功能,但它沒有。任何對你的對象持久的影響。

0

你的代碼將無法正常工作的原因是因爲你的覆蓋你的原型功能

myTest.changeTestVar = "foo"; //this is replacing the function for a string 
console.log(myTest.testVar); // -> blub 

因爲你調用一個函數的值應該像任何其他溫控功能

myTest.changeTestVar("foo"); 
console.log(myTest.testVar); // -> foo 
0

你錯了傳遞當將參數傳遞給函數時,順便直接更改變量

var myTest = new littleTest(); 
console.log(myTest.testVar); 

myTest.testVar="foo"; 
console.log(myTest.testVar);