私はOOPを理解しようとしています。これが私の最初の試みです。私がthis
キーワードを使用していても、オブジェクト内のword
プロパティ変数がcheckLetter
関数console.logで利用できないのはなぜ私は混乱しています。私のpickWord
機能では、私は問題なしでthis.word
を使用することができます。変数word
とthis.word.length
をcheckLetter
に利用するにはどうすればよいですか?このキーワードを使用してオブジェクトリテラルでプロパティ変数が定義されていません
var words = ["cancer", "aids", "stroke", "diabetes" ];
var keys = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
point = 0;
var init = {
word: "",
word_index: 0,
point_status: 0,
pickWord: function(){
this.word = words[this.word_index];
this.displayDashes(this.word);
},
displayDashes: function(word){
for(var i = 0; i< word.length; i++){
var blankLetter = document.createElement("div");
var hiddenletter = document.createTextNode(word[i]);
blankLetter.appendChild(hiddenletter);
blankLetter.classList.add('dashes');
var wordHolder = document.getElementById('wordHolder');
wordHolder.appendChild(blankLetter);
}
},
addKeys: function(){
for (var i = 0; i < keys.length; i++){
var key = document.createElement("div");
key.classList.add('keys');
key.onclick = this.checkLetter;
var letter = document.createTextNode(keys[i]);
key.appendChild(letter);
var keyboard = document.getElementById('keyboard');
keyboard.appendChild(key);
}
},
checkLetter: function(){
var letterElems = document.getElementsByClassName('dashes');
this.style.backgroundColor = 'blue';
for(var i = 0; i < letterElems.length; i++){
if(this.innerHTML == letterElems[i].innerHTML){
letterElems[i].style.backgroundColor = 'white';
pointStatus = point++;
}
}
// checkPoints(pointStatus);
// console.log(point);
console.log("the word: " + this.word);
if(point == this.word.length){
alert('you won ' + point + " points so far!");
this.nextWord();
}
},
nextWord: function(){
alert('im inside nexword');
this.word_index++;
this.pickWord();
}
}
init.pickWord();
init.addKeys();
// init.displayDashes();
あなたは 'this.style'または' this.innerHTML'のようなものを使用しているとして、クリックハンドラ*は、クリックされた要素を指すcheckLetter' 'で' this' *と呼ばれることを知っているように見えます。なぜあなたは 'init'オブジェクトを同時に指していると思いますか? – Bergi
あなたの場合、修正は簡単ですが、代わりに 'init.word'を参照してください。 – Bergi
私はオブジェクトの中に作成されるので、オブジェクトを指すことを期待しました。 それが最初に動作しない理由は、 'addKeys'関数でonclickを作成し、' checkLetter'関数で 'word'を単独で使うようにしようとするためです。オブジェクト? – oxxi