这是我的html
<script src="game.js"></script>
<script src="help.js"></script>
$(document).ready(function () {
game = new Game();
game.start();
})
</script>
Run Code Online (Sandbox Code Playgroud)
游戏.js:
var Game = function() {
this.start = function() {
console.log('start');
};
};
Run Code Online (Sandbox Code Playgroud)
帮助.js
Game.help = function() {
alert('help');
}
Run Code Online (Sandbox Code Playgroud)
但是 game.help() 会引发错误
怎么了 ?以及如何解决它?
错误:帮助未定义
首先,Game.help将函数附加到函数Game,而不是对象的实例Game。
也就是说,Game.help = function () { ... }将允许Game.help()但不允许new Game().help()。这相当于大多数 OO 语言中的静态方法。
您可以做的但不是很惯用的事情是更改help.js为:
Game.prototype.help = function () {
...
}
Run Code Online (Sandbox Code Playgroud)
这会将函数附加为方法,因此 的任何实例都Game可以help()调用它。
不过,从另一个模块(/文件)扩展类的原型有点粗略,因为它添加了隐式依赖项(隐式阻止浏览器强制执行它,当您忘记依赖项并更改看起来的内容时,通常会导致错误无关)。
在 ES7 扩展方法提案最终确定(和 ES7)落地之前,您可能需要考虑使用将其范围作为第一个参数的辅助方法:
help(game, ...) {
alert('help for ' + game.name);
}
Run Code Online (Sandbox Code Playgroud)
这仍然不太理想,但比较安全。
| 归档时间: |
|
| 查看次数: |
1702 次 |
| 最近记录: |