mic*_*ace 0 javascript prototype
如何调用setTile范围之外的函数TopDownGame?我试过TopDownGame.Lesson31.setTile(x,y),但它不起作用.
var TopDownGame = TopDownGame || {};
TopDownGame.Lesson31 = function() {};
TopDownGame.Lesson31.prototype = {
setTile: function(x, y) {
console.log(tile);
}
};
Run Code Online (Sandbox Code Playgroud)
如果已添加到原型,则必须创建对象的实例以调用方法:
var TopDownGame = TopDownGame || {};
TopDownGame.Lesson31 = function() {};
TopDownGame.Lesson31.prototype = {
setTile: function(x, y) {
console.log("setTile invoked");
},
};
var instance = new TopDownGame.Lesson31();
instance.setTile(3, 4);
Run Code Online (Sandbox Code Playgroud)
你试图调用它,就像它是一个静态方法.如果这是您真正想要做的,请将方法定义为函数的属性,而不是原型的属性.
TopDownGame.Lesson31 = function() {};
TopDownGame.Lesson31.staticMethod = function() {
console.log('Static method invoked');
}
TopDownGame.Lesson31.staticMethod();
Run Code Online (Sandbox Code Playgroud)
但是如果你真的想保留setTile原型方法,但仍然调用它,你可以使用该apply方法.
var TopDownGame = TopDownGame || {};
TopDownGame.Lesson31 = function() {};
TopDownGame.Lesson31.prototype = {
setTile: function(x, y) {
console.log(`setTile invoked, this='${this}', x=${x}, y=${y}`);
},
};
new TopDownGame.Lesson31().setTile(3, 4);
TopDownGame.prototype.setTile.apply('actually a string', [5, 6]);
Run Code Online (Sandbox Code Playgroud)
这将导致:
setTile invoked, this='[object Object]', x=3, y=4
setTile invoked, this='actually a string', x=5, y=7
Run Code Online (Sandbox Code Playgroud)