如何从按钮调用Javascript中的方法(使用此方法)?

时间:2015-08-18 18:45:22

标签: javascript button methods

在javascript中使用按钮调用函数很简单:

b.onclick = f;

也可以通过按钮调用方法:

Myclass.prototype.m = function() {
    var t = this;
    b.onclick = t.f;
}

但我们想从一个按钮通过另一个函数调用我们类的方法。有没有办法在不传入原始对象的情况下执行此操作?

这是不起作用的代码。 this.e在按钮的上下文中解释。

<!DOCTYPE html>
<html>
<body>
</body>
<script>
function A() {}
A.prototype.e = function() {
  console.log("bar");
}

A.prototype.f = function() {
  console.log("foo!");
  this.e();
}

A.prototype.g = function() {
  var b = document.createElement("button");
  b.innerHTML = "say foo!";
  b.onclick = this.f;
  document.getElementsByTagName("body")[0].appendChild(b);
}

var a = new A();
a.g();

</script>
</html>

2 个答案:

答案 0 :(得分:1)

由于流量中断,您应绑定以下

<!DOCTYPE html>
<html>
<body>
</body>
<script>
function A() {}
A.prototype.e = function() {
  console.log("bar");
}

A.prototype.f = function() {
  console.log("foo!");
  this.e();
}

A.prototype.g = function() {
  var b = document.createElement("button");
  b.innerHTML = "say foo!";
  b.onclick = this.f.bind(this)
  document.getElementsByTagName("body")[0].appendChild(b);
}

var a = new A();
a.g();

</script>
</html>

答案 1 :(得分:1)

使用Function.prototype.bindthis关键字的上下文更改为a实例

<!DOCTYPE html>
<html>
<body>
</body>
<script>
function A() {}
A.prototype.e = function() {
  console.log("bar");
}

A.prototype.f = function() {
  console.log("foo!");
  this.e();
}

A.prototype.g = function() {
  var b = document.createElement("button");
  b.innerHTML = "say foo!";
  b.onclick = this.f.bind(this);
  document.getElementsByTagName("body")[0].appendChild(b);
}

var a = new A();
a.g();

</script>
</html>