原型继承JavaScript在不同函数中使用变量
Prototypal inheritance javascript using variables in different functions
我正在制作一个刽子手游戏,以提高我对原型遗传的了解。
我完全困惑为什么变量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
成员上将其声明为静态成员...
我认为您的脚本中存在一些不一致之处...我将尝试通过一个例子来解释javascript中静态成员和实例成员之间的区别:
考虑到 ES6 规范,类的实现有点不同。
在类似 javascript 类的编程中,在 prototype
对象上声明的每个成员都应该被假定为 instance member
,因此,该类的每个实例都将继承这些成员。
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
相关文章:
- 带有两个变量函数的Ajax提交表单
- 设置变量函数不起作用
- 为什么使用 ||在变量函数声明中
- Javascript 变量函数不保留值
- 为什么要在函数定义之外引用静态变量(函数属性)
- jQuery 变量函数无法运行
- 循环中的变量函数定义
- javascript onclick设置为变量函数名
- JavaScript:调用已启动类(数据包处理程序)的变量函数
- Javascript测试存根全局变量函数
- Aptana能否识别其他文件中定义的变量/函数
- jquery将其传递给变量函数
- 传递一个变量函数到数组[Javascript]
- 如何使用' this '像一个对象,并通过字符串获得它的变量/函数
- javascript变量/函数的首字母是什么意思?
- Javascript .apply带有变量函数名
- 在JavaScript中添加一个全局变量/函数(特别是NativeScript)
- 变量函数未定义错误
- AngularJS-继续检查变量/函数
- Javascript从本地向全局变量函数添加行