javascript - 如何在 JavaScript 中调用原型(prototype)之外的函数?

标签 javascript prototype

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

var TopDownGame = TopDownGame || {};

TopDownGame.Lesson31 = function() {};

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

最佳答案

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

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);

您试图像调用静态方法一样调用它。如果这就是您真正想要做的,请将方法定义为函数的属性,而不是原型(prototype)的属性。

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

TopDownGame.Lesson31.staticMethod();

但是,如果您确实想保留 setTile 作为原型(prototype)方法,但仍调用它,则可以使用 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

关于javascript - 如何在 JavaScript 中调用原型(prototype)之外的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52696596/

相关文章:

javascript - 使用构造函数进行原型(prototype)设计时如何访问实例?

javascript - 使用原型(prototype)与直接在构造函数中定义方法的优势?

javascript - 检索菜单项单击上的托盘位置

javascript - 从输入中删除字符时,如何防止 keyup 事件触发两次?

javascript - 将字符串外部化到单独文件时的字符串替换

jquery - 从 jQuery 原型(prototype)函数 ($.fn) 获取实例/引用

uitableview - iOS Storyboard: set a background color to prototype cell

javascript - 如何使 Chart JS 中的两条线变粗

javascript - 为什么即使使用 obj.focus(),iPhone 上也不会显示键盘?

javascript - 添加事件监听器后的原型(prototype)继承问题