You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用onclick原型函数报错:this.entername()不是一个函数

问题分析与解决方案

这个报错的核心原因很明确:你在按钮的onclick里写的this,指的是按钮这个DOM元素本身,而不是你创建的Fortune类的实例——按钮元素自然没有entername这个方法,所以控制台会提示“不是函数”。

下面给你两种可行的解决办法:

方法一:直接引用Fortune实例调用方法

首先你得确保已经创建了Fortune的实例,然后在按钮的点击事件里直接调用这个实例的entername方法:

完整代码示例

// 先定义Fortune构造函数(如果还没写的话)
function Fortune() {
  // 这里可以添加构造函数的初始化逻辑
}

// 你的原型方法
Fortune.prototype.entername = function () {
  var person = prompt("Please enter your name", "Harry Potter");
  if (person != null) {
    document.getElementById("demo").innerHTML = "Hello " + person + "! Check Your Fortune";
  };
  this.words();
}

// 补充words方法(假设你还没定义)
Fortune.prototype.words = function() {
  // 这里写显示运势的逻辑,比如弹出提示
  alert("Today's fortune: May good luck follow you everywhere!");
}

// 创建Fortune的实例
const myFortuneApp = new Fortune();

修改HTML中的按钮代码:

<p class="dark" id="demo">
  <button onclick="myFortuneApp.entername()">Click to Enter Name & see your Fortune</button>
</p>

方法二:使用事件监听器(更推荐,避免全局变量暴露)

如果你不想把Fortune实例暴露成全局变量,可以用DOM事件监听的方式绑定点击行为:

代码示例

HTML部分:

<p class="dark" id="demo">
  <button id="fortuneBtn">Click to Enter Name & see your Fortune</button>
</p>

JavaScript部分(在创建实例后添加):

// 选中按钮元素,绑定点击事件
document.getElementById('fortuneBtn').addEventListener('click', function() {
  myFortuneApp.entername();
});

这样做的好处是不会在全局作用域里多一个变量,代码结构更整洁。

内容的提问来源于stack exchange,提问作者Aryan Chaurasia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:17:37