如何在JavaScript中调用原型之外的函数?

如何在JavaScript中调用原型之外的函数?,javascript,prototype,Javascript,Prototype,在TopDownGame的范围之外,如何调用setTile函数?我尝试了topdownggame.Lesson31.setTile(x,y),但不起作用 var TopDownGame = TopDownGame || {}; TopDownGame.Lesson31 = function() {}; TopDownGame.Lesson31.prototype = { setTile: function(x, y) { console.log(tile);

TopDownGame
的范围之外,如何调用
setTile
函数?我尝试了
topdownggame.Lesson31.setTile(x,y)
,但不起作用

var TopDownGame = TopDownGame || {};

TopDownGame.Lesson31 = function() {};

TopDownGame.Lesson31.prototype = {
    setTile: function(x, y) {
        console.log(tile);
    }
};

如果已添加到原型,则必须创建对象的实例以调用方法:

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);
您试图调用它,就像它是一个静态方法一样。如果这是您真正想要做的,那么将方法定义为函数的属性,而不是原型的属性

TopDownGame.Lesson31 = function() {};
TopDownGame.Lesson31.staticMethod = function() {
    console.log('Static method invoked');
}

TopDownGame.Lesson31.staticMethod();
但是,如果您确实希望保留
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]);
这将导致:

setTile invoked, this='[object Object]', x=3, y=4
setTile invoked, this='actually a string', x=5, y=7

如果已添加到原型,则必须创建对象的实例以调用方法:

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);
您试图调用它,就像它是一个静态方法一样。如果这是您真正想要做的,那么将方法定义为函数的属性,而不是原型的属性

TopDownGame.Lesson31 = function() {};
TopDownGame.Lesson31.staticMethod = function() {
    console.log('Static method invoked');
}

TopDownGame.Lesson31.staticMethod();
但是,如果您确实希望保留
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]);
这将导致:

setTile invoked, this='[object Object]', x=3, y=4
setTile invoked, this='actually a string', x=5, y=7

var topdownggame=topdownggame | |{};Lesson31={setTile:function(x,y){console.log(tile);},};var topdownggame=topdownggame | |{};Lesson31={setTile:function(x,y){console.log(tile);},};