原型继承 javascript 在不同函数中使用变量
Prototypal inheritance javascript using variables in different functions
我正在制作 Hangman 游戏来提高我对原型继承的了解。
我完全不明白为什么有一个变量 this.guesses
在原型函数中不可见。我尝试了各种我能想到的不同组合。
我的代码如下:
function Hangman () {
this.token;
this.guesses = 7;
}
Hangman.prototype.startGame = function() {
$.ajax({
url:"http://hangman-api.herokuapp.com/hangman",
type: "POST",
data: {}
}).done(function(data) {
console.log(data);
Hangman.token = data.token;
$(".hangman-word").text(data.hangman);
}).fail(function() {
alert( "error" );
});
};
Hangman.prototype.takeGuess = function(token, letter){
var letter = $("#letter").val();
$.ajax({
url:"http://hangman-api.herokuapp.com/hangman",
type:"PUT",
data: {"token": Hangman.token, "letter": letter }
}).done(function(data) {
Hangman.guesses = Hangman.guesses - 1;
console.log(Hangman.guesses)
}).fail(function() {
alert( "error" );
});
console.log(Hangman.token);
}
var hangman = new Hangman;
hangman.startGame();
真正奇怪的是 Hangman.token
在 takeGuess
函数中可见,但 Hangman.guesses
不可见。谁能解释为什么会这样?
guesses
成员是一个实例成员,您不能将其称为静态成员。
该成员是在构造函数中声明的,因此,它将仅作为 this.guesses
.
可用
Hangman.token
存在是因为您将其声明为 startGame
成员上的静态成员...
我认为您的脚本中存在一些不一致之处...我将尝试向您解释 static 和 instances 中的成员 javascript 通过示例:
Consider that with the ES6 specification, the implementation of classes it's a bit different.
在 javascript class 类编程中,在 prototype
对象上声明的每个成员都应假定为 instance member
,因此,该 [=53] 的每个实例=] 将继承这些成员。
var Person = (function() {
function Person() {}
Person.prototype.sayHello = function() { alert('Hello ' + this.name ); };
Person.prototype.name = 'Foo';
return Person;
})();
var hitmands = new Person();
hitmands.sayHello();
否则,在原型对象之外声明的每个成员都将被假定为 static member
。
var Person = (function() {
function Person() {}
Person.sayHello = function() { alert('Hello ' + Person.name ); };
Person.name = 'Foo';
return Person;
})();
var hitmands = new Person();
try { hitmands.sayHello(); } catch(e) { console.log(e.name, e); }
// but you can use
Person.sayHello();
最后,我建议你看看这个资源https://en.wikipedia.org/wiki/Member_variable
我正在制作 Hangman 游戏来提高我对原型继承的了解。
我完全不明白为什么有一个变量 this.guesses
在原型函数中不可见。我尝试了各种我能想到的不同组合。
我的代码如下:
function Hangman () {
this.token;
this.guesses = 7;
}
Hangman.prototype.startGame = function() {
$.ajax({
url:"http://hangman-api.herokuapp.com/hangman",
type: "POST",
data: {}
}).done(function(data) {
console.log(data);
Hangman.token = data.token;
$(".hangman-word").text(data.hangman);
}).fail(function() {
alert( "error" );
});
};
Hangman.prototype.takeGuess = function(token, letter){
var letter = $("#letter").val();
$.ajax({
url:"http://hangman-api.herokuapp.com/hangman",
type:"PUT",
data: {"token": Hangman.token, "letter": letter }
}).done(function(data) {
Hangman.guesses = Hangman.guesses - 1;
console.log(Hangman.guesses)
}).fail(function() {
alert( "error" );
});
console.log(Hangman.token);
}
var hangman = new Hangman;
hangman.startGame();
真正奇怪的是 Hangman.token
在 takeGuess
函数中可见,但 Hangman.guesses
不可见。谁能解释为什么会这样?
guesses
成员是一个实例成员,您不能将其称为静态成员。
该成员是在构造函数中声明的,因此,它将仅作为 this.guesses
.
Hangman.token
存在是因为您将其声明为 startGame
成员上的静态成员...
我认为您的脚本中存在一些不一致之处...我将尝试向您解释 static 和 instances 中的成员 javascript 通过示例:
Consider that with the ES6 specification, the implementation of classes it's a bit different.
在 javascript class 类编程中,在 prototype
对象上声明的每个成员都应假定为 instance member
,因此,该 [=53] 的每个实例=] 将继承这些成员。
var Person = (function() {
function Person() {}
Person.prototype.sayHello = function() { alert('Hello ' + this.name ); };
Person.prototype.name = 'Foo';
return Person;
})();
var hitmands = new Person();
hitmands.sayHello();
否则,在原型对象之外声明的每个成员都将被假定为 static member
。
var Person = (function() {
function Person() {}
Person.sayHello = function() { alert('Hello ' + Person.name ); };
Person.name = 'Foo';
return Person;
})();
var hitmands = new Person();
try { hitmands.sayHello(); } catch(e) { console.log(e.name, e); }
// but you can use
Person.sayHello();
最后,我建议你看看这个资源https://en.wikipedia.org/wiki/Member_variable